首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将其他类型转换为Impala数组

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

Stack Overflow用户
提问于 2018-05-23 01:46:13
回答 1查看 1.3K关注 0票数 0

我有一个程序可以将像这样的('A','B')字符串注入到查询中。如何将其转换为数组侧视图,如下所示

代码语言:javascript
复制
col
---
 A
 B

黑斑鹿vs.蜂巢中没有explode(array('A','B'))函数。我不能将这些值存储在表中,因为它在内存中,并且动态地注入到SQL中。

我需要这样做的原因是我有另一个表要与数组中的项连接。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-05-23 03:51:15

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

演示:在蜂窝中

代码语言:javascript
复制
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;

黑斑点

代码语言:javascript
复制
select myarray.item from test_array, test_array.myarray ;

结果

代码语言:javascript
复制
+------+
| item |
+------+
| a    |
| b    |
| c    |
| d    |
+------+

默认情况下,impala使用名称"item“来访问原始数组的元素。在结构数组的情况下,需要修改要访问的字段的item。

如果我们添加一个空数组,一件有趣的事情

代码语言:javascript
复制
 insert into test_array select  array() from (select '1') t;

如果我们运行相同的查询,您将不会看到空数组作为结果的一部分,这是因为这本质上类似于在记录和数组之间进行内部连接,排除空值。如果您希望包含包含空数组信息的记录,则查询将如下所示

代码语言:javascript
复制
 select myarray.item from test_array LEFT OUTER JOIN  test_array.myarray ;

+------+
| item |
+------+
| c    |
| d    |
| a    |
| b    |
| NULL |
+------+

(您可以找到有关不同joins here的更多信息

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50473661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档