Cassandra 从地图中选择特定值

Cassandra 从地图中选择特定值,cassandra,cql,cql3,Cassandra,Cql,Cql3,我正在尝试创建一个宽列表,20000多个列 最初我想我会使用: CREATE TABLE details ( key TEXT, detail map<TEXT, TEXT> PRIMARY KEY (KEY) ); 然而,我想读一个单独的细节: select detail[col1] where key='123' 执行此查询时,我得到以下错误: no viable alternative at input '[' 这会起作用吗,还是我需要一种不

我正在尝试创建一个宽列表,20000多个列

最初我想我会使用:

CREATE TABLE details (
   key TEXT,
   detail map<TEXT, TEXT>
   PRIMARY KEY (KEY)
  );
然而,我想读一个单独的细节:

   select detail[col1] where key='123'
执行此查询时,我得到以下错误:

 no viable alternative at input '['

这会起作用吗,还是我需要一种不同的方法?

基本上,cassandra还不支持此功能


见此

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

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

CREATE TABLE details (
  key TEXT,
  detail_key text,
  detail_value text,
  PRIMARY KEY (key, detail_key)
);
这将允许
SELECT*FROM details WHERE key=?
以及
SELECT*FROM details WHERE key=?和detail_key=?

您可以使用代替。 请尝试以以下方式定义表:

CREATE TYPE detailtype (
    col1 TEXT,
    col2 TEXT
);

CREATE TABLE details (
   key TEXT,
   detail frozen<detailtype>,
   PRIMARY KEY (KEY)
);
select detail.col1 where key='123';

谢谢,这是我采取的方法。仍然没有看到它3.9,不知道原因是什么,找不到它。另外,它们本身存储为列。在CQL中不可能部分读取集合列。从集合中检索数据的唯一方法是读取集合的全部内容;因此,在集合列中存储大型、无边界的数据集通常是不切实际的
select detail.col1 where key='123';