Hadoop 将其他类型转换为Impala数组

Hadoop 将其他类型转换为Impala数组,hadoop,hive,impala,Hadoop,Hive,Impala,我有一个程序,它将如下字符串('a','B')注入到查询中。如何将其转换为这样的阵列横向视图 col --- A B 在黑斑羚和蜂巢中没有分解(数组('A','B'))功能。我无法将这些值存储在表中,因为它位于内存中,并动态注入SQL 我需要它的原因是我有另一个表要与数组中的项连接 感谢Impala只允许选择原语类型作为select语句的一部分,要分解数组(我猜您的表只有一个名为myarray的列),您需要执行类似的操作 演示: 蜂房 结果 +------+ | item | +-----

我有一个程序,它将如下字符串
('a','B')
注入到查询中。如何将其转换为这样的阵列横向视图

col
---
 A
 B
在黑斑羚和蜂巢中没有分解(数组('A','B'))功能。我无法将这些值存储在表中,因为它位于内存中,并动态注入SQL

我需要它的原因是我有另一个表要与数组中的项连接


感谢

Impala只允许选择原语类型作为select语句的一部分,要分解数组(我猜您的表只有一个名为myarray的列),您需要执行类似的操作

演示: 蜂房

结果

+------+
| item |
+------+
| a    |
| b    |
| c    |
| d    |
+------+
默认情况下,impala使用名称“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 |
+------+

(您可以找到有关不同联接的更多信息

是的,如果我有创建表的方法,我知道这种方法。不幸的是,所有操作都必须在单个查询中进行。您知道数组或字符串的大小吗?
 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 |
+------+