如何查询缺少值的行?

时间:2014-06-08 16:42:03

标签: cassandra cql

有一个列系列看起来像:

CREATE TABLE data (
  id uuid,
  order_id text,
  order_ts timestamp,
  product_category text,
  product_distributor text,
  store_state text,
  transaction_discount decimal,
  transaction_id text,
  transaction_qty int,
  transaction_total decimal,
  PRIMARY KEY (id)
) 

如何查询没有transaction_total的所有行?似乎它很简单(ISNULL),但在Cassandra中不存在。

2 个答案:

答案 0 :(得分:1)

  1. 为了能够过滤列NULL暗示:

    的行
    1. 存储引擎实际存储该列的值
    2. NULL被认为是,而不是缺失值的标记
    3. 作为旁注,SQL空间中已经讨论了NULL marker-vs-value及其3值逻辑的含义,解释和含义(见wkipedia article }

      回到卡桑德拉:

      1. Cassandra不存储缺失值(因此NULL列实际上不存在 - 将不存储标记,标记或值)
      2. 要避免NULL - is-it-a-value-or-a-marker问题,您可以使用默认值(对于此特定示例,似乎将transaction_total设置为-1会明确表示需要计算的值)
      3. 更新:发布以上内容让我想到是否有办法引入is_column_missing运营商(这也不是一次性能损失)。 Cassandra使用布隆过滤器来减少磁盘搜索次数 - 布隆过滤器基本上可以确定文件中是否不存在行。不幸的是,没有可用于检查相同类型信息的每行列索引,因此基本上C *必须读取行的所有条目以确定列是否存在。你可以想象这会很糟糕。

答案 1 :(得分:-1)

您只需检查null值即可。如下所示:

select *  from data where transaction_total <> null

在此处查看其他信息3783