【发布时间】:2019-03-27 11:15:58
【问题描述】:
我正在使用 hive 并且我有一个以下格式的表格(我只显示一行,但它有很多行)
_______________________________
segments | rates | sessID
---------|-----------|---------
'1,2,3' | '10,20,30'| 555
也就是说,两列有一个字符串表示相同长度的数组,第三列有一些整数。我想展平数组,使第一个数组的第一个成员与第二个数组的第一个成员出现在同一行中,等等: 比如:
----------------------------
segment | rate | sessId
--------|------|------------
1 | 10 | 555
2 | 20 | 555
3 | 30 | 555
我尝试了以下查询(为简单起见,我对值进行了硬编码):
SELECT explode(segments), explode (rates), sessID FROM
(SELECT Split('1,2,3', ',') as segments, Split('10,20,30', ',') as rates, 555 as sessID) data ;
但是,这确实会产生所需的结果,并返回错误:
失败:SemanticException 1:26 UDTF 仅支持 SELECT 子句中的单个表达式。在令牌“费率”附近遇到错误
当我尝试仅展平一列时,它确实有效: 查询:
SELECT explode(segments) FROM (
SELECT Split('1,2,3', ',') as segments, Split('10,20,30', ',') as rates, 555 as sessID) data ;
结果:
1
2
3
我怎样才能得到我想要的结果?
【问题讨论】:
-
分段是否总是从 1 开始并从那里单调递增? (
1,2或1,2,3或1,2,3,4等?但从来没有2,3,4或3,2,1?) -
在没有更多信息的情况下,这可能会引导您朝着正确的方向前进:community.hortonworks.com/questions/65227/…
-
不,不确定值会增加。