在 Hive 中使用 inline(ARRAY<STRUCT[,STRUCT]>)



是否有人能够使用该功能之前,我已经尝试了几乎每一个组合,以看看它是否有效。

这是我试图与内联

使用的Struct数组
[{"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)

我也试着把它放在选择没有成功谢谢你

下面是我如何(成功地)使用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

这对我有用

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

查询:

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

最新更新