我正在尝试创建一个WIDE列表,20,000多列
最初我以为我会用:
CREATE TABLE details (
key TEXT,
detail map<TEXT, TEXT>
PRIMARY KEY (KEY)
);
插入此表可以正常工作
UPDATE details SET detail = detail + { 'col1': '12'} where key='123' ;
UPDATE details SET detail = detail + { 'col20000': 'ABCD'} where key='123' ;
但是,我想阅读一个单独的细节:
select detail[col1] where key='123'
执行此查询时出现以下错误:
no viable alternative at input '['
这会起作用吗,还是我需要一种不同的方法?
答案 0 :(得分:14)
集合是您可以一次获取所有数据的小型数组。
如果你想更精细地访问元组,并且仍然能够询问“给定密钥的所有数据对是什么”,你应该使用这样的表:
CREATE TABLE details (
key TEXT,
detail_key text,
detail_value text,
PRIMARY KEY (key, detail_key)
);
这将允许SELECT * FROM details WHERE key = ?
以及SELECT * FROM detail WHERE key = ? AND detail_key = ?
。
答案 1 :(得分:7)
cassandra基本上不支持此功能。
请参阅此cql3 collections
答案 2 :(得分:0)
您可以使用user-define type代替map type。 尝试以这种方式定义表:
CREATE TYPE detailtype (
col1 TEXT,
col2 TEXT
);
CREATE TABLE details (
key TEXT,
detail frozen<detailtype>,
PRIMARY KEY (KEY)
);
然后您可以通过以下方式查询:
select detail.col1 where key='123';