Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Case语句处理逻辑与预期不同_Sql_Hive_Hiveql - Fatal编程技术网

Sql Case语句处理逻辑与预期不同

Sql Case语句处理逻辑与预期不同,sql,hive,hiveql,Sql,Hive,Hiveql,我正在尝试使用度量根据ID的数量分配状态。这是我编写的查询(它是有效的): 但是,对于case语句中的第二个条件,impl_状态不正确。在结果集中,我可以看到is_100=false的行,数组_大小介于1和10之间,但是impl_状态最终是“no contact”,而不是“first contact”。我在想也许between不包括在内,但根据文档,它似乎是这样的。确保字符串中没有隐藏的空间 when (( trim(x.is_100) = 'false') and size(collect_s

我正在尝试使用度量根据ID的数量分配状态。这是我编写的查询(它是有效的):


但是,对于case语句中的第二个条件,impl_状态不正确。在结果集中,我可以看到is_100=false的行,数组_大小介于1和10之间,但是impl_状态最终是“no contact”,而不是“first contact”。我在想也许between不包括在内,但根据文档,它似乎是这样的。

确保字符串中没有隐藏的空间

when (( trim(x.is_100) = 'false') and size(collect_set(x.list)) between 1 and 10) then 'first contact'

我很好奇这是否有效:

(case when x.is_100 or count(distinct x.list) > 10
      then 'implemented'
      when (not x.is_100) and count(x.list) > 0 
      then 'first contact'
      else 'no contact'
 end) as impl_status,

在没有字符串比较的情况下,这应该是相同的逻辑——这是一个关于Hive中布尔的有趣观点。我还认为
COUNT()
比数组功能更清晰。

如果使用字符串作为
is\u 100
,那么字符串匹配可能不精确。它是一个存储了'true'/'false'的布尔列,而不是1/0is\u 100是一个布尔列,因此不能与trim一起使用。在第二种情况下,您缺少and运算符,但在其他情况下似乎可以工作!我同意使用distinct也比collect\u set看起来更好。谢谢
(case when x.is_100 or count(distinct x.list) > 10
      then 'implemented'
      when (not x.is_100) and count(x.list) > 0 
      then 'first contact'
      else 'no contact'
 end) as impl_status,