gpt4 book ai didi

Cassandra CQL 查询检查多个值

转载 作者:行者123 更新时间:2023-12-04 07:54:46 26 4
gpt4 key购买 nike

如何使用 Cassandra CQL 查询检查非主键字段的值是“A”还是“B”? (我使用的是 Cassandra 2.0.1)

这是表定义:

CREATE TABLE my_table (
my_field text,
my_field2 text,
PRIMARY KEY (my_field)
);

我试过:
1> SELECT * FROM my_table WHERE my_field2 IN ('A', 'B');

2> SELECT * FROM my_table WHERE my_field2 = 'A' OR my_field = 'B' ;

第一个失败并显示此消息:
Bad Request: IN predicates on non-primary-key columns (my_field2) is not yet supported

第二个失败,因为 Cassandra CQL 不支持 OR 关键字

我无法让这个简单的查询工作(以非常直接的方式)。一般来说,我对处理 CQL 查询感到非常沮丧。是因为Cassandra不够成熟,对查询的支持真的很差,还是我必须改变思维方式?

最佳答案

这是 cassandra 的有意功能。您不能在不存在的列上使用 WHERE 子句进行查询

  • 分区键
  • 组合键的一部分

  • 这是因为您的数据围绕 cassandra 节点环进行分区。您希望避免必须要求整个环返回您查询的答案。理想情况下,您希望能够从环中的单个节点检索数据

    通常在 cassandra 中,您希望构建表以匹配您的查询,而不是关系规范化。所以你有几个选择来处理这个问题。

    1) 将您的数据写入多个表以支持各种查询。在您的情况下,您可能希望创建第二个表
    CREATE TABLE my_table (
    my_field2 text,
    my_field text,
    PRIMARY KEY (my_field2)
    );

    然后您的第一个查询将正确返回

    2)用复合键创建你的表作为
    CREATE TABLE my_table (
    my_field text,
    my_field2 text,
    PRIMARY KEY (my_field, my_field2)
    );

    使用这种方法,如果你没有为 my_field 指定查询值,那么你需要在你的查询后附加一个限定符来告诉 cassandra 你真的想查询整个环
    SELECT * FROM my_table WHERE my_field2 IN ('A', 'B') ALLOW FILTERING;

    -编辑-

    您不能使用二级索引来搜索多个值。根据 CQL 文档

    http://www.datastax.com/documentation/cql/3.0/webhelp/cql/ddl/ddl_primary_index_c.html

    “索引是一种数据结构,可以快速、高效地查找与给定条件匹配的数据。”

    所以,你必须给它一个且只有一个值。

    关于Cassandra CQL 查询检查多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19231778/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com