Обработка дат в Hadoop

Я новичок в экосистеме больших данных /Hadoop и заметил, что даты не всегда обрабатываются стандартным образом в разных технологиях. Я планирую загружать данные из Oracle в таблицы Hive на HDFS, используя Sqoop с форматами файлов Avro и Parquet. Hive продолжает импортировать мои даты в значения BIGINT, я бы предпочел TIMESTAMPS. Я пытался использовать переопределения "--map-column-hive"... но все равно не работает.

Ищете предложения по лучшему способу обработки дат для этого варианта использования.

1 ответ

Решение

Формат файла паркета

Если вы используете Sqoop для преобразования данных RDBMS в Parquet, будьте осторожны с интерпретацией любых результирующих значений из столбцов DATE, DATETIME или TIMESTAMP. Базовые значения представлены в виде типа Parquet INT64, который представлен как BIGINT в таблице Impala. Значения Parquet представляют время в миллисекундах, а Impala интерпретирует BIGINT как время в секундах. Поэтому, если у вас есть столбец BIGINT в таблице Parquet, который был импортирован таким образом из Sqoop, разделите значения на 1000 при интерпретации как тип TIMESTAMP.

Avro Формат файла

В настоящее время таблицы Avro не могут содержать столбцы TIMESTAMP. Если вам необходимо сохранить значения даты и времени в таблицах Avro, в качестве обходного пути вы можете использовать STRING-представление значений, преобразовать значения в BIGINT с помощью функции UNIX_TIMESTAMP() или создать отдельные числовые столбцы для отдельных полей даты и времени, используя функция EXTRACT().

Вы также можете использовать свой запрос Hive, чтобы получить результат в желаемом формате TIMESTAMP.

FROM_UNIXTIME(CAST(SUBSTR(timestamp_column, 1,10) AS INT)) AS timestamp_column;

Другой обходной путь - импорт данных с использованием --query в команде sqoop, где вы можете привести ваш столбец в формат отметки времени.

пример

--query 'SELECT CAST (INSERTION_DATE AS TIMESTAMP) FROM tablename WHERE $CONDITIONS'

Если ваш запрос SELECT становится немного длиннее, вы можете использовать файлы конфигурации, чтобы сократить длину вызова командной строки. Вот ссылка

Другие вопросы по тегам