2
My Cassandra ColumnFamily使用Murmur3Partitioner,並具有複合分區鍵。 有了這個分區器,我試圖創建一個令牌,但是看起來這個令牌工廠只允許Long值。 是否有可能爲「token(partition_column1,partition_column2)」這樣的東西生成這些散列?如何爲複合分區鍵生成Cassandra Token?
My Cassandra ColumnFamily使用Murmur3Partitioner,並具有複合分區鍵。 有了這個分區器,我試圖創建一個令牌,但是看起來這個令牌工廠只允許Long值。 是否有可能爲「token(partition_column1,partition_column2)」這樣的東西生成這些散列?如何爲複合分區鍵生成Cassandra Token?
它應該工作。實際上,如果您的分區鍵是複合的,則您應該無法僅爲單個列創建標記。你確定你已經正確定義了組合鍵嗎?
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)
這是正確的,上面的所有語句都成立。不過,我正在尋找從java api創建這種令牌的方法,而不是執行查詢,即使用org.apache.cassandra.dht.Murmur3Partitioner生成可能的令牌範圍。 – user3507166
如果您想使用Java API創建它,則必須使用'partitioner.getToken(ByteBuffer)'API。有關詳細信息,可以在https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/cql3/functions/TokenFct中開始查看CQL'token()'函數的實現.java。 –
工程就像一個魅力,非常感謝! – user3507166