Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
Arrays 在配置单元SQL中分解列表以识别空白_Arrays_Hive_Hiveql - Fatal编程技术网

Arrays 在配置单元SQL中分解列表以识别空白

Arrays 在配置单元SQL中分解列表以识别空白,arrays,hive,hiveql,Arrays,Hive,Hiveql,我在配置单元表中有一个名为part_nos_list as array的列。显然,该列为空,我想用“-”来更新它。代码可以做到这一点,但GROUPBY中的42行显示为空白。我试图检查个人记录,但没有成功。这是配置单元sql。这个sql有什么问题吗 SELECT order_id, exploded_part_nos FROM sales.order_detail LATERAL VIEW explode(part_no_list) part_nos AS exploded_part_nos

我在配置单元表中有一个名为part_nos_list as array的列。显然,该列为空,我想用“-”来更新它。代码可以做到这一点,但GROUPBY中的42行显示为空白。我试图检查个人记录,但没有成功。这是配置单元sql。这个sql有什么问题吗

SELECT order_id, exploded_part_nos
FROM   sales.order_detail LATERAL VIEW explode(part_no_list) part_nos AS exploded_part_nos where sale_type in ('POS', 'OTC' , 'CCC') and exploded_part_nos = ''
但是,sql的这个group将42显示为空白

select * from (SELECT explo,count(*) as uni_explo_cnt 
FROM sales.order_detail 
LATERAL VIEW explode(split(concat_ws("##", part_no_list),'##')) yy AS explo where sale_type in ('POS', 'OTC' , 'CCC') group by explo order by explo asc) DD
这是蜂巢桌的样子

Id Part_no_list
1  ["OTC","POS","CCC"]
2  ["OTC","POS"]
4  NULL
5
6  ["-"]
7  ["OTC","POS","CCC"]

提前感谢

要测试分解的数组元素是否为空,请使用以下命令:

select * from(
select explode( array("OTC","POS","CCC",""))  as explo 
) s where explo=''
结果是一个空字符串

如果要标识包含空元素的数组,请使用
array\u contains

select * from(
select array("OTC","POS","CCC","")  as a
) s where array_contains(a,'')
结果:

["OTC","POS","CCC",""]
如果要查找只包含一个元素的数组-空字符串,请使用
size(数组)=1
array\u contains(数组“”)

但是也有空数组之类的东西。 它与包含空元素的数组显示相同,但不同

要查找空数组,请使用
size()=0
例如:

返回
[]

对您的数据运行所有这些查询,您将获得启发。我认为它是空数组,而不是你的例子中的空元素

空数组不为NULL,因为它仍然是大小为零的数组对象:

select * from(
select array()  as a
) s where a is null
不返回任何行


最好只查询数组而不分解,并使用
array\u contains
size
查找空数组和空元素。使用横向视图外部生成行,即使横向视图通常不会生成行。没有外部单词的横向视图用作内部连接,请参见关于

的文档请提供一些数据示例。另外,也不清楚42列在哪里,我指的是行。我不知道我为什么说专栏。您可以假设一个表是myHiveTable,只有2列Id字符串,part_no_list数组。通常,空列、空列和列中的少数其他值应填充一个hypen“-”,以便UI可以在默认情况下过滤这些值。看一下代码,看起来这项工作正在进行中。尝试了第一个sql,没有出现空白记录。但是我收到了另一个sql,它是第二个sql,它显示了42行,其中部分\u no\u列表为空。这是cloudera的节目。我正在使用配置单元来运行sql(而不是impala)。第一个配置单元sql是否正确请提供列表包含的部分我想确定第5行您的第5行是什么???它不能只是空白。它应该始终是一个数组。一个空白元素的数组看起来像[]而不仅仅是空白感谢您花时间帮助编写查询。这看起来不错,我将接受答案。我假设order_detail中的表名在内部select中。对吗?如果是这样的话,你介意加上这个吗?这样我就可以接受答案。@user1509593只有你知道确切的情况,因为我没有你的数据,无法复制。谢谢你的加入。我的目标是让它对其他人有用。我将表名放在内部select中
select * from(
select array()  as a
) s where a is null