HIVE несколько строк в столбцы - PullRequest
0 голосов
/ 13 июня 2018

У меня есть файл, который я обрабатываю, и пытаюсь объединить несколько строк одним и тем же ключом до столбцов в одной строке.

мой ввод

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

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Я смог сделать это с помощью следующего кода после анализа таблицы, чтобы получить дату раздела:

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

Здесь я сделаю объединение в другой таблице и проанализирую данные вправильные столбцы для моей финальной таблицы.

0 голосов
/ 13 июня 2018
  • 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;
    
...