我们可以在Cassandra中动态定义cols吗?

时间:2017-08-28 22:17:54

标签: cassandra spark-dataframe spark-streaming

我在Spark Dataframe中有一个嵌套的json对象,需要存储在Cassandra中。我是Spark Streaming和Cassandra的新手,想知道以下内容:

  1. 它是否必须被夷为平地?我需要访问各个列进行处理 - 如何展平嵌套的json?
  2. 我知道Cassandra的早期版本(在权威指南中)它是无架构的,它仍然是这样吗?意思是如果第一行带有10个cols,它会动态创建这些cols,如果第二行只有2个cols值(意味着其他cols没有出现在传入的json中),那么该行将只保存2个cols。或者我需要在存储之前处理空值?

2 个答案:

答案 0 :(得分:1)

1:您可以将整个JSON文档放入一列文本数据类型;您还可以尝试从JSON映射更多字段,将它们转换为平面对象并构建一个也可以编制索引的地图。和Cassandra一样 - 你必须根据所需的查询来设计你的模型。

2:表的结构是严格定义的,你不能轻松地将一个任意列添加到一行。你必须改变整个CF /表来做到这一点。另一方面,动态列完全由CQL3 via支持 聚类列(宽行)。因此无法水平添加列 但是纵向是。

从JSON值映射中省略的列被视为空插入(如果存在,则会导致删除现有值。)

答案 1 :(得分:1)

  
      
  1. 我知道Cassandra的早期版本(在权威指南中)它是无架构的,它仍然是这样吗?
  2.   

尽管CQL需要静态模式,但在内部,CQL分区是一个很宽的行,您可以使用群集键动态添加列。请参阅this answerthis explanation