将其他类型转换为Impala数组

时间:2018-05-22 17:46:13

标签: hadoop hive impala

我有一个程序将类似('A','B')的字符串注入查询中。如何将其转换为像这样的数组横向视图

col
---
 A
 B

Impala vs. Hive中没有explode(array('A','B'))功能。我无法将这些值存储在表中,因为它存储在内存中并动态注入SQL。

我需要这个的原因是我有另一个表来加入数组中的项目。

由于

1 个答案:

答案 0 :(得分:1)

Impala只允许选择基本类型作为select语句的一部分,以爆炸你的数组(我猜你的表只有一个名为myarray的列)你将需要做这样的事情。

演示: 在Hive中

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 |
+------+

(您可以找到有关不同联接here

的更多信息
相关问题