16

我正在尝试创建一个包含 20,000 多列的 WIDE Column Table

最初我想我会使用:

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 '['

这会奏效吗,还是我需要不同的方法?

4

3 回答 3

15

集合是您一次获取所有数据的小组。

如果您想在更精细的级别访问元组,并且仍然能够询问“给定键的所有数据对是什么”,您应该使用如下表:

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 = ?.

于 2013-04-17T13:34:35.047 回答
7

基本上,cassandra 尚不支持此功能。

看到这个cql3 集合

于 2013-04-17T06:39:44.683 回答
1

您可以使用用户定义类型而不是地图类型。尝试以这种方式定义表:

CREATE TYPE detailtype (
    col1 TEXT,
    col2 TEXT
);

CREATE TABLE details (
   key TEXT,
   detail frozen<detailtype>,
   PRIMARY KEY (KEY)
);

然后可以通过这种方式查询:

select detail.col1 where key='123';
于 2019-04-26T19:40:15.130 回答