2

基本的に、私のテーブルのセットアップ方法は次のとおりです。

CREATE TABLE points (
  name ascii,
  id varint,
  attributes map<ascii, ascii>,
  PRIMARY KEY (name, id)
)

次の SELECT ステートメントを実行すると、これが返されます。

SELECT id, attributes from points limit 5;

   id | attributes
  ----+------------------------------------------
    1 | {STATION/Name: ABC, Type: 2, pFreq: 101}
    2 | {STATION/Name: ABC, Type: 1, pFreq: 101}
    3 | {STATION/Name: DEF, Type: 1, pFreq: 103}
    4 | {STATION/Name: GHI, Type: 2, pFreq: 105}
    5 | {STATION/Name: GHI, Type: 1, pFreq: 105}

私がやりたいことは、属性内の情報に基づいて WHERE 句を形成できるようにすることです。次のステートメントのようなもの:

SELECT id FROM points WHERE name = 'NAME' AND attributes['pFreq'] = 101;

ただし、これを実行すると、次のエラーが発生します。

Bad Request: line 1:56 no viable alternative at input '['

この議論を見たところ、まだサポートされていないように見えますが、これは本当ですか? または、属性情報をフィルタリングする方法はありますか?

私が使用しているバージョンは次のとおりです。

[cqlsh 4.1.1 | Cassandra 2.0.7 | CQL spec 3.1.1 | Thrift protocol 19.39.0]
4

1 に答える 1

1

はい、そうです。代わりに CONTAINS を使用できます。

SELECT * FROM points WHERE attributes CONTAINS 101;
于 2015-07-01T21:25:39.947 に答える