地图上的 Cassandra 查询 - 包含子句
Cassandra query on Map - Contains Clause
我正在尝试查询包含地图的 table。是否可以在地图数据类型 table 上应用 contains 子句?
CREATE TABLE data.Table1 (
fetchDataMap map<text, frozen<Config>>,
userId text ,
PRIMARY KEY(userId)
);
出现以下错误:
cqlsh> SELECT * FROM data.Table1 WHERE fetchDataMap CONTAINS '233322554843924';
InvalidRequest: code=2200 [Invalid query] message="No secondary indexes on
the restricted columns support the provided operators: "
请教我更好的查询方法。
为此,您必须在地图上创建二级索引。但是,您首先必须问自己是否要索引您的映射键或值(不能两者都做)。根据你的 CQL 语句,我假设你想索引你的地图键(我们将从那里开始)。
CREATE INDEX table1_fetchMapKey ON table1(KEYS(fetchDataMap));
插入一些数据后(猜测您的 Config
UDT 是什么样子),我可以 SELECT 对上面的 CQL 查询稍作修改:
aploetz@cqlsh:Whosebug> SELECT * FROm table1 WHERE
fetchDataMap CONTAINS KEY '233322554843924';
userid | fetchdatamap
--------+------------------------------------------------------------
B26354 | {'233322554843924': {key: 'location', value: '~/scripts'}}
(1 rows)
请注意,如果不将 link 传递给 DataStax 文档 When To Use An Index,我不能凭良心向您提供此解决方案。众所周知,二级索引表现不佳。所以我只能想象 collection 上的二级索引会表现更差,但我想这真的取决于相对基数。如果是我,我会重新建模我的 table 以避免使用二级索引,如果可能的话。
我正在尝试查询包含地图的 table。是否可以在地图数据类型 table 上应用 contains 子句?
CREATE TABLE data.Table1 (
fetchDataMap map<text, frozen<Config>>,
userId text ,
PRIMARY KEY(userId)
);
出现以下错误:
cqlsh> SELECT * FROM data.Table1 WHERE fetchDataMap CONTAINS '233322554843924';
InvalidRequest: code=2200 [Invalid query] message="No secondary indexes on
the restricted columns support the provided operators: "
请教我更好的查询方法。
为此,您必须在地图上创建二级索引。但是,您首先必须问自己是否要索引您的映射键或值(不能两者都做)。根据你的 CQL 语句,我假设你想索引你的地图键(我们将从那里开始)。
CREATE INDEX table1_fetchMapKey ON table1(KEYS(fetchDataMap));
插入一些数据后(猜测您的 Config
UDT 是什么样子),我可以 SELECT 对上面的 CQL 查询稍作修改:
aploetz@cqlsh:Whosebug> SELECT * FROm table1 WHERE
fetchDataMap CONTAINS KEY '233322554843924';
userid | fetchdatamap
--------+------------------------------------------------------------
B26354 | {'233322554843924': {key: 'location', value: '~/scripts'}}
(1 rows)
请注意,如果不将 link 传递给 DataStax 文档 When To Use An Index,我不能凭良心向您提供此解决方案。众所周知,二级索引表现不佳。所以我只能想象 collection 上的二级索引会表现更差,但我想这真的取决于相对基数。如果是我,我会重新建模我的 table 以避免使用二级索引,如果可能的话。