如何将Hive映射分解为非规范化(“长”)格式?

时间:2015-07-11 19:06:33

标签: hiveql

我想采用一堆用户功能(比如国家,语言,注册日期......),并以非规范化的“长”格式在Hive中生成它们,即表单行(userid,feature name,特征值),其中特征名称类似于“country”,特征值类似于“US”。

我正在使用Hive 0.13。

下面的示例都有一个功能(国家/地区),为了简单起见,但如果我可以使用一个功能,我会添加更多功能。

查询#1:

select explode(map('country', get_json(json, 'country')))
from users

这样做有两列结果(键,值),其结果如下所示

country  US
country  CA
...

查询#2:

select id, explode(map('country', get_json(json, 'country')))
from users

失败
FAILED: SemanticException [Error 10081]: UDTF's are not supported
outside the SELECT clause, nor nested in expressions

查询#3:

select key, value
from users
lateral view explode(map('country', get_json(json, 'country')))

失败
FAILED: ParseException line 3:63 cannot recognize input
near '' '' '' in table alias

查询#4:

select key, value
from users
lateral view explode(map('country', get_json(json, 'country'))) as (key, value)

失败
FAILED: ParseException line 3:67 missing EOF at '(' near 'as'

是否有适用的版本?

1 个答案:

答案 0 :(得分:2)

让这个工作。

select id, key, value
from users
lateral view explode(map('country', get_json(json, 'country'))) feature_row