hive多行到列

j2datikz  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(369)

我有一个文件,我正在处理,并试图结合多行与同一个键向下列在一行。
我的意见是

rental_company  field_name          field_data      location_identifier
hertz           branchName          ANNABA AIRPORT  RCCTHERTZAAEREC000002
hertz           branchCode          AAE             RCCTHERTZAAEREC000002
hertz           countryCd           DZ              RCCTHERTZAAEREC000002
hertz           isAtAirport         true            RCCTHERTZAAEREC000002
hertz           branchPhone         0555066233      RCCTHERTZAAEREC000002
hertz           branchHoursMon      08:00-20:00     RCCTHERTZAAEREC000002
hertz           branchHoursTue      08:00-20:00     RCCTHERTZAAEREC000002
hertz           branchHoursWed      08:00-20:00     RCCTHERTZAAEREC000002
hertz           branchHoursThu      08:00-20:00     RCCTHERTZAAEREC000002
hertz           branchHoursFri      closed          RCCTHERTZAAEREC000002
hertz           branchHoursSat      closed          RCCTHERTZAAEREC000002
hertz           branchHoursSun      08:00-20:00     RCCTHERTZAAEREC000002
hertz           isParticipating     false           RCCTHERTZAAEREC000002
hertz           airportCode         AAE             RCCTHERTZAAEREC000002
hertz           shuttleServiceInd   false           RCCTHERTZAAEREC000002

我想输出的是

location_identifier                 branchName          branchCode  branchPhone
-----------------------------       ------------        ----------  --------------
RCCTENTERPRISEE10101REC000002       LADUE RENTAL        E10101      (314) 863 6886

我已经厌倦了使用以下工具:

SELECT
   location_identifier,
   kv('branchName') as branchName,
   kv('branchCode') as branchCode,
   kv('branchPhone') as branchPhone
FROM (
   SELECT location_identifier, to_map(field_name, field_data) kv
   FROM vtable
   GROUP BY location_identifier
      ) t;

最后出现以下错误:表达式不在group by键“field\u data”中,当我添加field\u data时,最后出现无法识别to\u map的错误。我试着用下面的例子:https://docs.treasuredata.com/articles/sql-tips#use-轴心的位置--取消轴心

cs7cruho

cs7cruho1#

to_map 无法识别是因为,配置单元没有该功能。
使用 [] 用于从map函数中提取值。
vtable很可能是不正确的表。请用表名替换它。

SELECT
    location_identifier,
    kv['branchName'] as branchName,
    kv['branchCode'] as branchCode,
    kv['branchPhone'] as branchPhone
FROM 
(
    SELECT location_identifier, to_map(field_name, field_data) kv
    FROM YourTableName
    GROUP BY location_identifier
) t;
dvtswwa3

dvtswwa32#

在解析表以获取分区日期之后,我可以使用以下代码来完成此操作:

SELECT 
    location_identifier,
    partition_dt,
    collect_list(field_data)
FROM vtable
GROUP BY location_identifier, partition_dt;

从这里开始,我将对另一个表进行连接,并将数据解析为最终表的正确列。

相关问题