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
Sorting 群集顺序不适用于复合分区键_Sorting_Cassandra_Cassandra 3.0_Compound Key - Fatal编程技术网

Sorting 群集顺序不适用于复合分区键

Sorting 群集顺序不适用于复合分区键,sorting,cassandra,cassandra-3.0,compound-key,Sorting,Cassandra,Cassandra 3.0,Compound Key,使用下表定义: CREATE TABLE device_by_create_date ( year int, comm_nr text, created_at timestamp, PRIMARY KEY ((year, comm_nr), created_at) ) WITH CLUSTERING ORDER BY (created_at DESC) Comm\u nr是唯一标识符 我希望在列中看到按创建的

使用下表定义:

CREATE TABLE device_by_create_date (
    year int,
    comm_nr text,
    created_at timestamp,
    PRIMARY KEY ((year, comm_nr), created_at)
) WITH CLUSTERING ORDER BY (created_at DESC)
Comm\u nr
是唯一标识符

我希望在列中看到按
创建的
示例条目:

表CQL:


如何从表中发出
select*查询,返回按
行创建的
排序的数据。

TLDR:您需要创建一个新表

您的分区密钥是
(年份,通信号)
。您是在键处创建的,但它是在该分区键内排序的。一个查询,其中
从表中选择*,其中year=x,comm\u nr=y将由在处创建的\u排序

此外,如果您的键不是在
创建的
(year,comm\u nr),而是在
创建的
year,comm\u r,created\u at
,即使您的create table语法只指定created\u at具有集群顺序,它也将被创建为具有集群顺序的
(comm\u nr DESC,created\u at DESC)
。数据在SSTables中按键从左到右排序


以真正的nosql方式实现这一点的方法是创建一个单独的表,其中的键是
year,created\u at,comm\u nr
。您可以在创建用户时写信给他们,但如果您需要先创建帐户的人的答案,您可以查询新表。

谢谢!假设我想显示2017年和2018年的所有设备。在本例中,我将发出2个查询-如何分页结果?PagingState仅对每个结果集可用。定制实施?您应该能够通过
SELECT*FROM table WHERE year IN(2017年、2018年)…
从应用程序端进行“1次查询”,并以这种方式订购。但是请理解,当1查询试图实现一致性时,它将命中
*
节点。因此,您的集群将比在常规查询上做更多的工作。没错,但不鼓励使用IN?或者,您可以在应用层中执行排序的协调(自定义实现),因为通常应用层的扩展性比数据层更好<由于上述缩放问题,不鼓励使用
中的code>。您在协调器节点上投入了更多的工作(内存压力和网络),并且通过一个查询访问了更多的集群。