如何在cassandra中处理动态列

piah890a  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(339)

我正在通过python脚本将json数据加载到cassandra表中。但是很少有json文件比通常有更多的列。目前我已经创建了一个包含100列的表,可以插入所有列。但是很少有json文件有超过100列的可能。怎么处理?如果json的列比表多,有什么方法可以创建动态列吗?

gcuhipw9

gcuhipw91#

如果您使用的是cql,则需要在插入数据之前定义所有列。理论上你可以用 ALTER TABLE add ... 添加新列,但通常不建议以编程方式进行,因为这可能会导致架构不一致和其他问题。
您可以通过以下方式解决此问题:
除了主键和最常用的列之外,还将json存储为文本,然后在读取数据时解析数据(甚至可以在java driver 3.x中使用额外的编解码器自动完成;
将数据存储在Map中(如果不更新单个值,最好使用冻结Map) text ,和实际值类型对应的值- int , text 例如:

create table test (
  pk1 ..,
  pk2 ..,
  pkN ..,
  imap frozen<map<text, int>,
  tmap frozen<map<text, text>,
  ...
  primary key(pk1, pk2, ...)
);

然后在代码中,按类型分隔列,并插入到相应的Map中。

相关问题