Hive在多列上奇怪处理空值?

时间:2015-03-17 13:46:18

标签: hadoop hive hiveql

此查询:

SELECT count(distinct
field1, 
field2, 
field3, 
field4)
FROM SOME_TABLE

返回与此查询不同(更小)的计数:

SELECT count(distinct
coalesce(field1,"null"), 
coalesce(field2,"null"),
coalesce(field3,"null"),
coalesce(field4,"null"))
FROM SOME_TABLE

我希望结果是相同的。对此有解释吗?

1 个答案:

答案 0 :(得分:3)

您看到不同结果的原因是两件事:

  • COUNT(DISTINCT(...)仅在所有指定字段为非null时计算不同的值。
    • 这是the documentation中列出的,但是当有多个字段时,它有点含糊不清。
  • 当你合并fieldn值时,你会说"当fieldn为空时,给我字符串" null",否则给我{ {1}}"

我最近也试图验证我对此的假设,并且无法在任何地方明确地说明它。但是说你有这样的表(下面的空值是空值,而不是字符串null):

fieldn

然后:

  • ----------------- |field1 |field2 | ----------------- |foo |null | |null |foo | ----------------- = 2
  • count(field1) = 1
  • count(distinct field1) = 2(' foo'和' bar' distinct)
  • count(distinct coalesce(field1, 'bar')) = 0(两者都不为空的组合)