我有一个程序可以将像这样的('A','B')字符串注入到查询中。如何将其转换为数组侧视图,如下所示
col
---
A
B黑斑鹿vs.蜂巢中没有explode(array('A','B'))函数。我不能将这些值存储在表中,因为它在内存中,并且动态地注入到SQL中。
我需要这样做的原因是我有另一个表要与数组中的项连接。
谢谢
发布于 2018-05-23 03:51:15
Impala只允许选择基本类型作为select语句的一部分,要分解您的数组(我猜您的表只有一个名为myarray的列),您需要这样做。
演示:在蜂窝中
create table test_array (myarray array<string>) stored as parquet ;
-- tricky way to insert values for array
insert into test_array select array('a','b') from (select '1') t;
insert into test_array select array('c','d') from (select '1') t;黑斑点
select myarray.item from test_array, test_array.myarray ;结果
+------+
| item |
+------+
| a |
| b |
| c |
| d |
+------+默认情况下,impala使用名称"item“来访问原始数组的元素。在结构数组的情况下,需要修改要访问的字段的item。
如果我们添加一个空数组,一件有趣的事情
insert into test_array select array() from (select '1') t;如果我们运行相同的查询,您将不会看到空数组作为结果的一部分,这是因为这本质上类似于在记录和数组之间进行内部连接,排除空值。如果您希望包含包含空数组信息的记录,则查询将如下所示
select myarray.item from test_array LEFT OUTER JOIN test_array.myarray ;
+------+
| item |
+------+
| c |
| d |
| a |
| b |
| NULL |
+------+(您可以找到有关不同joins here的更多信息
https://stackoverflow.com/questions/50473661
复制相似问题