Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Select 如何在cassandra中选择DISTINCT_Select_Cassandra_Distinct - Fatal编程技术网

Select 如何在cassandra中选择DISTINCT

Select 如何在cassandra中选择DISTINCT,select,cassandra,distinct,Select,Cassandra,Distinct,我想在Cassandra中选择DISTINCT,但我认为Cassandra不支持这些操作。如何在Cassandra中选择DISTINCT?可能吗?在CQL 3.1.1之前,不可能在cassandra中选择不同的值 如果您有旧版本的Cassandra,则必须在应用程序中实现该功能。您可以创建一个请求来实现该特性,尽管由于cassandra对非规范化数据模型的偏见,该特性似乎不会经常使用 想象一下,必须在一个非常大的分布式集群中找到唯一的行。及以后的版本只支持分区键的不同操作 SELECT语句现在允

我想在Cassandra中选择DISTINCT,但我认为Cassandra不支持这些操作。如何在Cassandra中
选择DISTINCT
?可能吗?

在CQL 3.1.1之前,不可能在cassandra中选择不同的值

如果您有旧版本的Cassandra,则必须在应用程序中实现该功能。您可以创建一个请求来实现该特性,尽管由于cassandra对非规范化数据模型的偏见,该特性似乎不会经常使用

想象一下,必须在一个非常大的分布式集群中找到唯一的行。

及以后的版本只支持分区键的不同操作

SELECT语句现在允许列出分区键(使用 不同的修饰语)。看

select_语句::=select[JSON | DISTINCT](select_子句|'*'))
从表\u名称
[WHERE_条款]
[逐组逐组条款]
[按顺序订购条款]
[每个分区限制(整数|绑定_标记)]
[限制(整数|绑定_标记)]
[允许筛选]
select_子句::=选择器[作为标识符](','选择器[作为标识符])
选择器::=列名称
|术语
|强制转换“(“选择器为cql_类型”)”
|函数名“(“[选择器(”,“选择器)*]]”)
|计数“(''*''”)
where_子句::=关系(和关系)*
关系::=列名称运算符项
“(”列名称(“,”列名称)*')运算符元组文字
标记“(”列名称(“,”列名称)*”)运算符项
运算符::='='''''.''''.'='.''.'!='.'IN | CONTAINS | CONTAINS KEY
group_by_子句::=列名称(','列名称)*
排序子句::=列名称[ASC | DESC](“,”列名称[ASC | DESC])*

正如其他人所写,Cassandra中不支持distinct on列,只支持主键。 使用cassandra执行此操作的两个选项:

  • 应用程序中的进程-需要从服务器读取整个表,并在代码中执行不同的操作
  • 创建一个二级表,其中键是要区分的列,并在对原始表执行操作时在其中进行双插入

  • 两者之间的决定取决于您的实际数据结构/大小和需要,如果表的大小很小或您执行此操作的时间很短,那么选项1将足够快,如果表很大,和/或您多次使用#2执行此查询。

    如果您在不使用WHERE子句的情况下运行DISTINCT,请记住,它仍然必须接触集群中的所有节点。
    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 ] )*