当前位置: 首页 > 知识库问答 >
问题:

关于Cassandra复合柱的文档

柴彬
2023-03-14

当我试图查找关于复合列的信息时,我找不到比2013年更新的信息(特别是这个是Google的顶部链接,它在谈到使用复合列时没有CQL代码,显然使用了非常旧的Java驱动程序)。Cassandra的新版本中还存在复合列吗?我是说,除了有组合键。

我是Cassandra的新手,实际上我想知道它们是否适合我的用例,如下所述。考虑一个有4个双值列的表,比如< code>w,< code>x,< code>y,< code>z。这些数据从三个来源收集,比如< code>a 、< code>b和< code>c。每个源可能会丢失部分数据,因此表的每一行最多有12个数字。我没有创建3个包含4列的表来存储来自不同数据源的值,然后合并这些表来填充缺失的字段,而是考虑创建一个将4个数据列建模为4个< code >超级列或< code >复合列的表。类似于< code>a:w,< code>b:w,< code>c:w,< code>a:x,< code>b:x,< code>a:y,< code>b:y,< code>c:y,< code>a:z,< code>b:z,< code >此外,每一行都有一个时间戳作为主键。

我想知道的是我是否可以有一个像SELECT*: w AS w From MyTable这样的查询,对于每一行,x的一个值从任何可用的源返回(无论来自哪个源)。尽管我也想保留从特定源检索数据的能力,比如SELECT a: w From MyTable

----------------------------------------------------------------
| key | a:w | b:w | c:w | a:x | b:x | c:x | a:y | b:y | c:y | ...
----------------------------------------------------------------
|  1  | 10  |  10 |  -  | ....
|  2  |  -  |  1  |  2  | ....
|  3  | 11  |  -  |  -  | ....
|  4  | 12  |  11 |  11 | ....
-----------------------------------------------------------------

SELECT *:w AS w FROM MyTable
(10, 1, 11, 12)   // would be an acceptable answer

SELECT a:w AS w FROM MyTable
(10, 11, 12)      // would be an acceptable answer

共有1个答案

冉绯辞
2023-03-14

复合列是与节俭协议相关的词汇表。在内部,直到Cassandra 2.2,存储引擎仍然处理复合列,并将它们转换为集群列,这是CQL附带的新词汇表。

自Cassandra 3. x以来,存储引擎已被重写,因此我们不再使用复合列存储数据。我们将存储引擎与新的CQL语义学(例如分区键/集群列)对齐。为了向后兼容,在处理传统的Thrift协议时,我们仍然将集群列转换回复合列语义学。

如果您只是从Cassandra开始,请忘记旧的Thrift协议并立即使用CQL语义。

根据您的需要,下面的模式应该可以完成这项工作:

CREATE TABLE my_data(
   data text,
   source text,
   PRIMARY KEY ((data), source)
);

INSERT INTO my_data(data, source) VALUES('data1','src1');
INSERT INTO my_data(data, source) VALUES('data1','src2');
...
INSERT INTO my_data(data, source) VALUES('dataN','src1');
...
INSERT INTO my_data(data, source) VALUES('dataN','srcN');

//Select all sources for data1
SELECT source FROM my_data WHERE data='data1';

//Select data and source
SELECT * FROM my_data WHERE data='data1' AND source='src1';
 类似资料:
  • 我在Cassandra中有以下列系列,用于将时间序列数据存储在少量非常“宽”的行中: 在CQL外壳上,我能够运行如下查询: 从本质上讲,我修复了复合列名称的第一个组成部分的值(minute_of_day),并希望根据第二个组成部分的不同值(event_id)选择一组不连续的列。由于“IN”关系被解释为相等关系,因此这工作正常。 现在我的问题是,我如何在没有CQL的情况下以编程方式完成相同类型的复合

  • 是否可以用GeoMesa指定键(即复合键)创建一个Cassandra表?我有一个写到Cassandra的spark作业,输出表需要一个复合键。我现在希望通过GeoMesa api而不是直接向Cassandra创建/编写相同的表。格式如下:

  • Cassandra源代码是最新的,它是从git@github.com: apache/cassandra.git.克隆的 JDK版本是1.8.0_05 操作系统:Linux 3.13.0-62-generic#102 Ubuntu SMP 后来,我尝试使用不同的JDK版本编译它,发现jdk1.8。0_11仍然有同样的问题,但是从jdk1.8开始。0_20,这个问题已经修复。 我想问是什么导致了这个

  • 我有一个带有复合分区键的 cassandra 表(time_bucket 时间戳,节点 int)。time_bucket值是插入数据的时间,秒转换为 00,节点值范围为 0 到 100 spark作业每分钟运行一次,从表中提取数据。该表包含近2500万条记录,每分钟都有记录被添加。 如果我的 Spark 作业每次运行时都选择所有记录,则作业将在 2 分钟内完成。但是如果我使用: s < code

  • 主要内容:Set集合,List集合,Map集合Cassandra集合用于处理任务。 您可以在集合中存储多个元素。 Cassandra支持三种类型的集合: Set List Map Set集合 Set集合存储查询时返回排序元素的元素组。 语法: 示例: 下面举个例子来展示集合。创建一个具有三列(, 和 )的表“”。 执行上面语句创建表以后如下: 现在,向上面创建的表中插入一些值: 执行上面语句结果如下 - List集合 当元素的顺序重要时,使用