【问题标题】:Ordering in Cassandra在 Cassandra 中订购
【发布时间】:2018-12-03 02:14:15
【问题描述】:

是的,所以我已经研究了一段时间,发现人们在 Cassandra 中排序数据时遇到问题并不少见,但我仍然无法弄清楚为什么我的选择没有按正确顺序排序大大地。 所以这是我的表创建查询:

CREATE TABLE library.query1 (
    id int,
    gender text,
    surname text,
    email text,
    addinfo text,
    endid int,
    name text,
    phone int,
    PRIMARY KEY ((id), gender, surname, email)
) WITH CLUSTERING ORDER BY (gender DESC, surname DESC, email DESC);

隐含地,我想按性别 > 姓 > 电子邮件对我的数据进行排序。

然后我通过 CVN 导入数据,因为我正在从 PostgreSQL 表中导入数据。这是我正在使用的 SELECT:

SELECT id, gender, name, surname, phone, email
FROM library.query1;

我在查询中是否忘记了要完成订购的内容,还是我的建模错误?

【问题讨论】:

  • 您的数据将仅在您的分区内排序。在您的情况下,分区是 id。
  • 我可以在分区中包含其他列吗?我尝试将主键设置为(id、gender、surname、email),但它似乎也不起作用。另外,发现我可能必须在某些 WHERE 子句中包含“id”才能对要排序的列,但这也失败了。

标签: cassandra cqlsh clustering-key


【解决方案1】:

例如,您可以为男性用户创建一个分区。那么您的订购应该可以正常工作。

CREATE TABLE library.query1 (
    id int,
    gender text,
    surname text,
    email text,
    addinfo text,
    endid int,
    name text,
    phone int,
    PRIMARY KEY (gender, surname, email)
) WITH CLUSTERING ORDER BY (surname DESC, email DESC);

【讨论】:

  • 是的,它确实有效。你能解释一下为什么在按“性别”分区时,每列都按需要排序,但当“id”是分区键时,什么都没有排序?
  • 当使用 id 作为聚类列时,会为每个 id 创建一个分区。在这个分区内只有一个条目,因为每个 id 都是不同的。这就是为什么你不能按 id 排序
  • 哦,我现在完全明白了。谢谢!
  • 这不是很好的设计——你会有太大的分区,因为你将gender 限制在非常少的可能值。
  • 这是正确的,我的回答是一个例子,所以他可以理解分区排序。如果我们谈论的是很多用户,您可以引入额外的聚类列,例如 registerWeek 或类似的东西
猜你喜欢
  • 2021-04-05
  • 2012-08-18
  • 2021-09-02
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-10
  • 2011-08-03
相关资源
最近更新 更多