Avi*_*Avi 7 select cql distinct cassandra cql3
我使用以下代码创建表:
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');
Run Code Online (Sandbox Code Playgroud)
我想找到lname列的不同值(不是PRIMARY KEY).我想得到以下结果:
lname
-------
smith
Run Code Online (Sandbox Code Playgroud)
通过使用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;
Run Code Online (Sandbox Code Playgroud)
我如何从中获取不同的值lname?
Undefined_variable有两个好处:
DISTINCT 仅适用于分区键.因此,实现此功能的一种方法是构建一个特定的表来支持该查询:
CREATE TABLE users_by_lname (
lname text,
fname text,
user_id int,
PRIMARY KEY (lname, fname, user_id)
);
Run Code Online (Sandbox Code Playgroud)
现在,在我将INSERT运行到这个新的查询表后,这有效:
aploetz@cqlsh:stackoverflow> SELECT DISTINCT lname FROm users_by_lname ;
lname
-------
smith
doe
(2 rows)
Run Code Online (Sandbox Code Playgroud)
注:在该表中,具有相同的分区键的所有行(lname)将被排序fname,作为fname是一个聚集键.我添加user_id了一个额外的群集密钥,只是为了确保唯一性.
| 归档时间: |
|
| 查看次数: |
10896 次 |
| 最近记录: |