我们可以在卡桑德拉中即时定义 cols 吗?



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

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

尽管 CQL 需要静态架构,但在内部,CQL 分区是宽行,你可以使用群集键动态添加列。看到这个答案和这个解释。

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

2:表的结构是严格定义的,你不能轻易地将任意列添加到一行中。您必须更改整个 CF/表才能执行此操作。另一方面,动态列,由 CQL3 通过 聚类列(宽行)。因此无法水平添加列 但垂直是的.

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

最新更新