我想在Cassandra SELECT DISTINCT
,但我认为Cassandra不支持这些操作。我怎样才能在卡桑德拉做SELECT DISTINCT
?有可能吗?
答案 0 :(得分:16)
CQL 3.1.1以及之后仅支持分区键的DISTINCT操作。
SELECT语句现在允许列出分区键(使用 DISTINCT修饰符)。见CASSANDRA-4536。
select_statement ::= SELECT [ JSON | DISTINCT ] ( select_clause | '*' )
FROM table_name
[ WHERE where_clause ]
[ GROUP BY group_by_clause ]
[ ORDER BY ordering_clause ]
[ PER PARTITION LIMIT (integer | bind_marker) ]
[ LIMIT (integer | bind_marker) ]
[ ALLOW FILTERING ]
select_clause ::= selector [ AS identifier ] ( ',' selector [ AS identifier ] )
selector ::= column_name
| term
| CAST '(' selector AS cql_type ')'
| function_name '(' [ selector ( ',' selector )* ] ')'
| COUNT '(' '*' ')'
where_clause ::= relation ( AND relation )*
relation ::= column_name operator term
'(' column_name ( ',' column_name )* ')' operator tuple_literal
TOKEN '(' column_name ( ',' column_name )* ')' operator term
operator ::= '=' | '<' | '>' | '<=' | '>=' | '!=' | IN | CONTAINS | CONTAINS KEY
group_by_clause ::= column_name ( ',' column_name )*
ordering_clause ::= column_name [ ASC | DESC ] ( ',' column_name [ ASC | DESC ] )*
答案 1 :(得分:1)
在CQL 3.1.1之前,无法在cassandra中选择不同的值。
如果您使用旧版本的Cassandra,则必须在应用程序中实现该功能。您可以创建一个JIRA ticket来请求实现该功能,但由于cassandra对非规范化数据模型的偏见,似乎不会经常使用此功能。
想象一下,必须在一个非常大的分布式集群中找到唯一的行。
答案 2 :(得分:1)
正如其他人所写的那样,Cassandra中不支持不同的列,仅支持主键。 使用cassandra执行此操作的两个选项:
两者之间的决定取决于您的实际数据结构/大小和需求,如果表格大小很小或您执行此操作非常少,选项1将足够快,如果表格很大,和/或你很多时候都会用#2来做这个查询。