gpt4 book ai didi

select - 在 CQL Cassandra 中查找非主键列的不同值

转载 作者:行者123 更新时间:2023-12-04 10:48:30 26 4
gpt4 key购买 nike

我使用以下代码创建表:

CREATE KEYSPACE mykeyspace
WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
USE mykeyspace;
CREATE TABLE users (
user_id int PRIMARY KEY,
fname text,
lname text
);
INSERT INTO users (user_id, fname, lname)
VALUES (1745, 'john', 'smith');
INSERT INTO users (user_id, fname, lname)
VALUES (1744, 'john', 'doe');
INSERT INTO users (user_id, fname, lname)
VALUES (1746, 'john', 'smith');

我想找到 lname 的不同值列(不是 PRIMARY KEY)。我想得到以下结果:
 lname
-------
smith

通过使用 SELECT DISTINCT lname FROM users;然而自从 lname不是 PRIMARY KEY我收到以下错误:
InvalidRequest: code=2200 [Invalid query] message="SELECT DISTINCT queries must
only request partition key columns and/or static columns (not lname)"
cqlsh:mykeyspace> SELECT DISTINCT lname FROM users;

如何从 lname 获取不同的值?

最佳答案

用户 - Undefined_variable - 提出两个好观点:

  • 在 Cassandra 中,您需要构建数据模型以匹配您的查询模式。这有时意味着将数据复制到其他表中,以获得所需的查询灵活性级别。
  • DISTINCT仅适用于分区键。

  • 因此,使其工作的一种方法是构建一个特定的表来支持该查询:
    CREATE TABLE users_by_lname (
    lname text,
    fname text,
    user_id int,
    PRIMARY KEY (lname, fname, user_id)
    );

    现在,在我将您的 INSERT 运行到这个新查询表后,这有效:
    aploetz@cqlsh:stackoverflow> SELECT DISTINCT lname FROm users_by_lname ;

    lname
    -------
    smith
    doe

    (2 rows)

    注意:在此表中,所有具有相同分区键( lname )的行将按 fname 排序, 如 fname是一个聚类键。我加了 user_id作为额外的聚类键,只是为了确保唯一性。

    关于select - 在 CQL Cassandra 中查找非主键列的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35840493/

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