按`list< double>`列的元素值范围过滤

tzxcd3kk  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(289)

我想在cassandra中过滤下表的行。

CREATE TABLE mids_test_db.defect_data (
    wafer_id text,
    defect_id text,
    document_id text,
    fields list<double>,
    PRIMARY KEY (wafer_id, defect_id)
) 
...
CREATE INDEX defect_data_fields_idx ON mids_test_db.defect_data (values(fields));

我第一次尝试的是 field[0] > 0.5 但失败了。

cqlsh:mids_test_db> select fields from  defect_data where  wafer_id =  'MIDS_1_20170101_023000_30000_1548100671' and fields[0] > 0.5;
InvalidRequest: Error from server: code=2200 [Invalid query] message="Indexes on list entries (fields[index] = value) are not currently supported."

在谷歌搜索了一段时间后,我觉得这种工作在Cassandra不容易完成。数据模型类似于字段值集合。我主要想问 defect 使用its的数据 fields 上面的数据对我的生意很重要。
我应该考虑什么方法?。应用程序端过滤?任何提示或建议将不胜感激。

cyvaqqii

cyvaqqii1#

不可能直接使用cassandra,但您有以下选择:
如果您的cassandra是datasax企业,那么您可以使用dse搜索;
可以添加其他表以执行查找:
(…忽略此行…)

CREATE TABLE mids_test_db.defect_data_lookup (
    wafer_id text,
    defect_id text,
    field double,
    PRIMARY KEY (wafer_id, field, defect_id)
);

之后,您应该能够在分区内执行范围扫描,并且至少获取 defect_id 字段,并通过第二个查询获取所有字段值。
根据您的cassandra版本,您可以使用物化视图为您维护查找表。

相关问题