我有一个正在处理的文件,我正在尝试将多行与相同的键组合成一行中的列。
我的输入是
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_data'中,当我添加field_data时,我最终得到的错误是to_map无法识别。我试图使用以下示例: https://docs.treasuredata.com/articles/sql-tips#use-of-pivot--unpivot
答案 0 :(得分:0)
to_map
无法识别是因为,Hive没有该功能。[]
从地图功能中提取值。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;
答案 1 :(得分:0)
在解析出表以获取分区日期后,我能够使用以下代码执行此操作:
SELECT
location_identifier,
partition_dt,
collect_list(field_data)
FROM vtable
GROUP BY location_identifier, partition_dt;
从这里开始,我将在另一个表上进行连接,并将数据解析到我的最终表的正确列中。