Arrays 在配置单元SQL中分解列表以识别空白
我在配置单元表中有一个名为part_nos_list as array的列。显然,该列为空,我想用“-”来更新它。代码可以做到这一点,但GROUPBY中的42行显示为空白。我试图检查个人记录,但没有成功。这是配置单元sql。这个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
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