在Hive中使用内联(ARRAY <struct [,struct]>)</struct [,struct]>

时间:2014-08-01 20:51:16

标签: hive hiveql

之前有人能够使用该功能,我已经尝试了几乎所有组合,以确定它是否有效。

这是我尝试使用内联

的结构数组
[{"position":1,"price":124.0,"card_pos":"External","clicked":0},
 {"position":2,"price":94.78,"card_pos":"Cbox","clicked":0},
 {"position":3,"price":94.77,"card_pos":"External","clicked":0}] 

这很好用:

select iq.*, iq.card.position as position, 
iq.card.price as price,iq.card.card_pos as card_pos, 
iq.card.clicked as clicked 
from
(
  select *
  from 
  hsim.im_metasearch
  LATERAL VIEW explode(cards) card as card
) iq

令我烦恼的是,我可以使内联功能正常工作。 关于如何正确使用此功能,Hive Wiki上的文档非常模糊。

我们有Hive 0.10(CDH4.6),内联函数绝对是我们发行版的一部分。

如果有人作为如何使用它的具体例子,请告诉我

我尝试了几种不同的语法

select *
from 
hsim.im_metasearch
Lateral view inline(cards) as(position,price,card_pos,clicked)

select *
from 
hsim.im_metasearch
Lateral view inline(cards) card as (position,price,card_pos,clicked)

我也尝试将其放入选择中但没有成功 谢谢

3 个答案:

答案 0 :(得分:3)

以下是我(成功)使用inline的示例。假设我们有一个数据集,如

id    |    num
---------------
1          2.0
1          4.0
2          5.0
1          7.0
1          8.0
2          8.0
1          3.0
1          5.0
1          6.0
3          7.0

如果您执行查询

select histogram_numeric(num, 3)
from table

您将获得一个直方图,该直方图分为3个以结构数组表示的区间。

[{'x':2.5, 'y:2.0'}, {'x':5.0, 'y':4.0}, {'x':7.5, 'y':4.0}]

大多数人希望以某种表格形式查看此内容,因此inline函数。所以我们可以做到

select inline(histogram_numeric(num, 3))
from table

这给出了

x    |    y
-------------
2.5      2.0
5.0      4.0
7.5      4.0

希望这有帮助。

答案 1 :(得分:2)

这对我有用

select * 
from table1 t
   lateral view inline(array_of_structs) a
;

答案 2 :(得分:0)

<强>查询:

select * from ( select ARRAY(named_struct('a1', 1, 'a2', 2)) as kk  from dim_one_row ) x lateral view  inline(kk)  t as ff, ff2;

<强>结果:

[{"a1":1,"a2":2}]       1       2