【问题标题】:Cassandra: Create a partitioned table without including the partitioned column name in primary keyCassandra:创建分区表而不在主键中包含分区列名
【发布时间】:2020-05-09 09:28:44
【问题描述】:

我想创建一个分区表,而不在主键中包含分区列名。
我不知道如何创建它,因为大多数示例都在主键部分声明了集群列。 我不确定它在 Cassandra 中是否可行,因此寻求帮助。

CREATE TABLE crossfit_gyms_by_city (  
 country_code text,  
 state_province text,  
 city text,  
 gym_name text,
 year int,
 month int,
 day int);

我的要求是
该表应该能够将数据存储为Year/Month/Day分区并按city的排序顺序。

【问题讨论】:

  • 您的查询模式要求是什么?是根据年月日城市来获取数据吗?另外我不明白您要对表进行分区,但在定义表时没有提及要分区的列?
  • @Yamini 数据应存储为按位名称排序的年/月/日分区。我的表示例是示例表创建,但我不知道如何根据我的要求定义分区表。
  • 在 Cassandra 中,表结构是根据查询要求构建的......我强烈建议在继续之前参加 DS220 课程
  • @Alex 正在处理一些紧急交付,因此开始工作而不是检查所有细节:(
  • “我想创建一个分区表,而不在主键中包含分区列名” - 是的,Cassandra 不能那样工作。它需要 PRIMARY KEY 定义中的分区键,以便它知道如何首先对数据进行分区。

标签: cassandra cql cqlsh


【解决方案1】:

根据 cmets,我假设您存储数据的方式就是您计划获取数据的方式。基于这个假设,我提出了下表结构; CREATE TABLE crossfit_gyms_by_city ( year int, month int, day int, city text, country_code text, state_province text, gym_name text, PRIMARY KEY ((year, month, day), city));

因此您的数据将根据year,month,day 进行分区,而您的聚类列将是city,因此数据按城市排序

另外,我建议您完成本课程,这将帮助您解决数据建模要求 https://academy.datastax.com/resources/ds220?path=developer

【讨论】:

  • 此查询存在一些问题。年/月/日作为主键列包含在内,因此如果我执行 upsert 操作,它将无法识别为重复记录。跨度>
  • 让我解释一下:country_code, state_province, city, gym_name text, year, month, day country_code 和 state_province 是行的唯一标识符,如果我插入具有相同 country_code 和 state_province 的新行,那么它将执行更新操作,否则插入。年月日值基本上是我的工作运行日期,如果我在主键中包含这些列,那么它将无法唯一地识别记录。
  • @BlueStar : 问题是我不完全了解您的要求并且还有很多问题,但是如果您在这里透露太多细节,您可能会违反您与雇主的保密协议。不幸的是,您没有捷径可以完成 DS220 课程。
猜你喜欢
  • 2016-12-21
  • 2017-05-22
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多