Arrays 配置单元表数组列-使用数组索引分解

Arrays 配置单元表数组列-使用数组索引分解,arrays,hadoop,hive,getjson,hiveql,Arrays,Hadoop,Hive,Getjson,Hiveql,嗨,我有一张蜂巢桌 select a,b,c,d from riskfactor_table In the above table B, C and D columns are array columns. Below is my Hive DDL Create external table riskfactor_table (a string, b array<string>, c array<double>, d array<double> )

嗨,我有一张蜂巢桌

select a,b,c,d from riskfactor_table 
In the above table B, C and D columns are array columns. Below is my Hive DDL 
Create external table riskfactor_table 
(a string, 
b array<string>, 
c array<double>, 
d array<double> ) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '~'  
stored as textfile location 'user/riskfactor/data'; 
但我希望使用下面的一个select语句填充所有列-

查询-从风险系数中选择a、b、c、d

输出:

jms  
jndi  
jaxb  
jxn  
one  
two  
three
row1-  ID400S    jms    100    1  
row2-  ID400S    jndi   200    2  
row3-  ID400S    jaxb    300    3  
row4-  ID400S    jaxn    400    4  

如何填充所有数据

您可以使用侧视图来实现这一点

       SELECT Mycoulmna, Mycoulmnb ,Mycoulmnc
                 FROM  riskfactor_table
             LATERAL VIEW explode(a) myTablea AS Mycoulmna
             LATERAL VIEW explode(a) myTableb AS Mycoulmnb
             LATERAL VIEW explode(a) myTablec AS Mycoulmnc ;

要了解更多信息,请抛出它。

使用Brickhouse的“数值范围”自定义项。下面是一篇描述细节的博客文章

在您的情况下,您的查询类似于

SELECT a, 
       array_index( b, i ),
       array_index( c, i ),
       array_index( d, i )
FROM risk_factor_table
 LATERAL VIEW numeric_range( 0, 3 );

我也在寻找同样问题的答案。谢谢Jerome,这是一个砖房解决方案

我必须做一点小小的改变(将别名“n1添加为n”),如下所示,以使其适用于我的案例:

hive> describe test;
OK
id              string
animals     array<string>
cnt         array<bigint>

hive> select * from test;
OK
abc     ["cat","dog","elephant","dolphin","snake","parrot","ant","frog","kuala","cricket"]      [10597,2027,1891,1868,1804,1511,1496,1432,1305,1299]

hive> select `id`, array_index(`animals`,n), array_index(`cnt`,n) from test lateral view numeric_range(0,10) n1 as n;
OK
abc     cat             10597
abc     dog             2027
abc     elephant        1891
abc     dolphin         1868
abc     snake           1804
abc     parrot          1511
abc     ant             1496
abc     frog            1432
abc     kuala           1305
abc     cricket         1299
hive>描述测试;
好啊
id字符串
动物阵列
碳纳米管阵列
蜂巢>从测试中选择*;
好啊
abc[“猫”、“狗”、“大象”、“海豚”、“蛇”、“鹦鹉”、“蚂蚁”、“青蛙”、“夸拉”、“蟋蟀”][10597202718911868180415111496143213051299]
蜂巢>从测试侧视图中选择'id',数组索引('animals',n),数组索引('cnt',n),数值范围(0,10)n1为n;
好啊
abc猫10597
abc狗2027
美国广播公司大象1891
abc海豚1868
abc斯内克1804
abc鹦鹉1511
abc蚂蚁1496
abc青蛙1432
美国广播公司瓜拉1305
abc板球1299

唯一的问题是我必须事先知道有10种元素需要爆炸。

我认为@sai并不是这样问的。三个侧面视图将基本上产生三个阵列的笛卡尔积,即每个阵列的所有元素与其他阵列中的所有元素的所有组合。在这个例子中,他只希望从每个数组的第i个元素中获得元组。根据示例,他正在寻找笛卡尔积。嗨,我不是在寻找三个数组的笛卡尔积。基本上,我希望取出数组中的所有值,并使用sqoop导出将数据加载到Netezza DB中。不清楚您想要的输出是什么。
ID400A
ID401S
ID402E
来自哪里?它们神奇地出现在你问题的末尾。嗨,我已经更正了我的输出。您能帮助我如何填充数据吗?另外,如果我在输入中得到一个空数组值或少于4个字段的值,如何映射数组列?可能与我尝试的数组列重复。我需要添加任何jar文件吗?你需要问题中提到的jar