这是我的数据: -
CREATE TABLE collect_things(k int PRIMARY KEY,n set<frozen<tuple<text, text>>>);
INSERT INTO collect_things (k, n) VALUES(1, {('hello', 'cassandra')});
CREATE INDEX n_index ON collect_things (n);
现在我必须这样查询: -
SELECT * FROM collect_things WHERE n contains ('cassandra') ALLOW FILTERING ;
输出: -
k | n
---+---------
预期产出: -
k | n
---+---------
1 | {('hello', 'cassandra')}
我想用&#c; cassandra&#39;来获取我的数据。价值。这可能吗 ?
答案 0 :(得分:1)
Collection里面的元组必须定义为冻结。
冻结值将多个组件序列化为单个值。非冻结类型允许更新单个字段。 Cassandra将冻结类型的值视为blob。必须覆盖整个值。
您必须将冻结视为单个值,并且不能将它们分开。因此,在查询时提供完整的冻结元组('hello', 'cassandra')
。
SELECT * FROM collect_things WHERE n CONTAINS ('hello', 'cassandra');
如果您有数据:
k | n
---+---------------------------------------------
1 | {('hello', 'cassandra'), ('test', 'seach')}
2 | {('test', 'seach')}
输出:
k | n
---+---------------------------------------------
1 | {('hello', 'cassandra'), ('test', 'seach')}
来源:https://docs.datastax.com/en/cql/3.1/cql/cql_reference/collection_type_r.html