我正在通过python脚本将json数据加载到cassandra表中。但是很少有json文件比通常有更多的列。目前我已经创建了一个包含100列的表,可以插入所有列。但是很少有json文件有超过100列的可能。怎么处理?如果json的列比表多,有什么方法可以创建动态列吗?
gcuhipw91#
如果您使用的是cql,则需要在插入数据之前定义所有列。理论上你可以用 ALTER TABLE add ... 添加新列,但通常不建议以编程方式进行,因为这可能会导致架构不一致和其他问题。您可以通过以下方式解决此问题:除了主键和最常用的列之外,还将json存储为文本,然后在读取数据时解析数据(甚至可以在java driver 3.x中使用额外的编解码器自动完成;将数据存储在Map中(如果不更新单个值,最好使用冻结Map) text ,和实际值类型对应的值- int , text 例如:
ALTER TABLE add ...
text
int
create table test ( pk1 .., pk2 .., pkN .., imap frozen<map<text, int>, tmap frozen<map<text, text>, ... primary key(pk1, pk2, ...) );
然后在代码中,按类型分隔列,并插入到相应的Map中。
1条答案
按热度按时间gcuhipw91#
如果您使用的是cql,则需要在插入数据之前定义所有列。理论上你可以用
ALTER TABLE add ...
添加新列,但通常不建议以编程方式进行,因为这可能会导致架构不一致和其他问题。您可以通过以下方式解决此问题:
除了主键和最常用的列之外,还将json存储为文本,然后在读取数据时解析数据(甚至可以在java driver 3.x中使用额外的编解码器自动完成;
将数据存储在Map中(如果不更新单个值,最好使用冻结Map)
text
,和实际值类型对应的值-int
,text
例如:然后在代码中,按类型分隔列,并插入到相应的Map中。