2014-04-07 26 views
2

My Cassandra ColumnFamily使用Murmur3Partitioner,並具有複合分區鍵。 有了這個分區器,我試圖創建一個令牌,但是看起來這個令牌工廠只允許Long值。 是否有可能爲「token(partition_column1,partition_column2)」這樣的東西生成這些散列?如何爲複合分區鍵生成Cassandra Token?

回答

4

它應該工作。實際上,如果您的分區鍵是複合的,則您應該無法僅爲單個列創建標記。你確定你已經正確定義了組合鍵嗎?

cqlsh:testks> create table t1(k1 int, k2 text, v text, primary key((k1, k2))); 
cqlsh:testks> insert into t1(k1, k2, v) values (1, 'key', 'value'); 
cqlsh:testks> select * from t1; 

k1 | k2 | v 
----+-----+------- 
    1 | key | value 

(1 rows) 

cqlsh:testks> select token(k1) from t1; 
Bad Request: Invalid number of arguments in call to function token: 2 required but 1 provided 
cqlsh:testks> select token(k2) from t1; 
Bad Request: Invalid number of arguments in call to function token: 2 required but 1 provided 
cqlsh:testks> select token(k1, k2) from t1; 

token(k1, k2) 
--------------------- 
8064425790465501062 

    (1 rows) 
+0

這是正確的,上面的所有語句都成立。不過,我正在尋找從java api創建這種令牌的方法,而不是執行查詢,即使用org.apache.cassandra.dht.Murmur3Partitioner生成可能的令牌範圍。 – user3507166

+0

如果您想使用Java API創建它,則必須使用'partitioner.getToken(ByteBuffer)'API。有關詳細信息,可以在https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/cql3/functions/TokenFct中開始查看CQL'token()'函數的實現.java。 –

+0

工程就像一個魅力,非常感謝! – user3507166

相關問題