Как вставить необработанные данные в таблицу кустов с различной последовательностью столбцов? - PullRequest
0 голосов
/ 13 января 2020

Учитывая: Hive Version 2.3.0 onwards, у меня есть таблица Hive и фиксированный DDL от долгого времени. Теперь raw data идет в другом порядке columns как text файлы и должен хранить данные в формате parquet с фиксированными критериями разбиения. Мой вопрос заключается в том, как справиться с такой ситуацией, когда входящие данные имеют different arrangement of columns.

Пример:

CREATE TABLE users ( col1 string, col2 int, col3 string ... )
PARTITIONED BY (...)
STORED AS PARQUET; 

, а порядок входящих данных подобен

      col1 col3 col2
(row)  x    p    1
       y    q    2

in text файлов, обратите внимание на порядок столбцов.

Мне трудно найти правильную информацию, может кто-нибудь объяснить лучшие практики, как справиться с такой ситуацией? Если это небольшой файл, мы можем использовать сценарии для исправления текста, но если его объем и каждый раз текстовые файлы имеют разную структуру, что делать? Ценю любой ответ / отзыв.

1 Ответ

1 голос
/ 13 января 2020

При изменении порядка столбцов и / или добавлении / удалении столбцов одним из вариантов является преобразование текстовых файлов в формат Parquet перед загрузкой файлов в таблицу Hive. Задайте свойство hive.parquet.use-column-names = true, равное false, с помощью по умолчанию - чтение файлов Parquet по именам столбцов, а не по индексам столбцов (таким образом вы устраняете зависимость от порядка столбцов в исходном файле). У разделов могут быть разные схемы, и вы можете создать таблицу с требуемыми общими столбцами.

Обратите внимание, что external table легче поддерживать по сравнению с управляемой таблицей без необходимости перемещать данные при изменении схемы. Когда схема изменится, вы можете удалить и заново создать таблицу и выполнить msck repair table .. для чтения данных.

Чтобы обнаружить изменения схемы, можно запустить процесс, который проверяет первую строку текстовых файлов (при условии, что они являются именами столбцов) на наличие изменений. Вывод этого процесса может быть записан в постоянное хранилище, такое как хранилище данных MongoDB / DynamoDB с соответствующим контролем версий схемы. Это помогает сохранять историю всех изменений схемы.

...