【问题标题】:CQLSH - Check for null in where clause for MAP Data typeCQLSH - 在 MAP 数据类型的 where 子句中检查 null
【发布时间】:2016-01-13 18:14:20
【问题描述】:

CASSANDRA 版本:2.1.10

CREATE TABLE customer_raw_data (
  id uuid,
  hash_prefix bigint,
  profile_data map<varchar,varchar>
  PRIMARY KEY (hash_prefix,id));

我在 profile_data 上有一个索引,并且我有一个 profile_data 为空的行。

如何编写选择查询来检索 profile_data 为空的行?

我尝试了以下

select count(*) from customer_raw_data where profile_data=null;

select count(*) from customer_raw_data where profile_data CONTAINS KEY null;

【问题讨论】:

标签: cassandra cqlsh


【解决方案1】:

基本问题。 where 条件列必须是主键或二级索引,因此使您的列适合,然后尝试以下查询。 试试这个..

select count(*) from customer_raw_data where profile_data='';

【讨论】:

  • 我在 profile_data 列上有一个二级索引,对于您的查询,我得到以下错误 InvalidRequest: code=2200 [Invalid query] message="Collection column 'profile_data' (map) cannot受“=”关系限制”
  • 我没有插入任何值,只是将该字段设为空白。所以你也可以做同样的事情,而不是插入为 NULL。
【解决方案2】:

参考:https://issues.apache.org/jira/browse/CASSANDRA-3783

目前没有对索引空值的选择支持,并且考虑到 Cassandra 的设计,这被认为是一个困难/禁止的问题。

【讨论】:

    【解决方案3】:

    SELECT * FROM TableName WHERE colName > 5000 ALLOW FILTERING; //工作正常

    SELECT * FROM TableName WHERE colName > 5000 limit 10 ALLOW FILTERING;

    https://cassandra.apache.org/doc/old/CQL-3.0.html

    选中“允许过滤”部分。

    【讨论】:

      猜你喜欢
      • 2011-11-22
      • 2015-05-08
      • 2013-12-29
      • 1970-01-01
      • 2022-10-24
      • 1970-01-01
      • 2020-05-19
      • 2011-05-20
      • 1970-01-01
      相关资源
      最近更新 更多