Mem SQL конвейер от S3, вставляющий NULL в столбцы типа DATE - PullRequest
0 голосов
/ 08 апреля 2020

Предполагается, что конвейер Mem sql выводит данные из S3 в таблицу columnstore. Исходные файлы в формате OR C. они тогда преобразованы в Паркет. Файлы имеют определенные столбцы с типом данных DATE (гггг-мм-дд).

Конвейер работает нормально, но вставляет NULL во все столбцы типа Date.

1 Ответ

1 голос
/ 08 апреля 2020

Значения DATE могут записываться в Parquet как int64 с пометкой логического типа отметки времени (https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#timestamp). Mem SQL в настоящее время не преобразует их автоматически в формат, совместимый, например, с DATETIME или TIMESTAMP, а скорее пытается присвоить столбцу назначения, как будто путем назначения целочисленного литерала с исходным базовым значением. Это дает NULL, а не ошибку по MySQL причинам совместимости, хотя set global data_conversion_compatibility_level="7.0" сделает это ошибкой.

Вы можете исследовать, временно указав тип столбца проблемы TEXT и просмотрев полученное значение. Если это целочисленная строка, проблема описана выше, и вы можете использовать предложение SET в CREATE PIPELINE, чтобы преобразовать значение в совместимый формат через что-то вроде CREATE PIPELINE P AS LOAD DATA .... INTO TABLE T(@col_tmp <- parquet_field_name) SET col = timestampadd(microsecond, @col_tmp, from_unixtime(0));.

Значение будет отсчитываться с некоторой единицы времени, начиная с эпохи unix в некотором часовом поясе. Единица измерения и часовой пояс зависят от автора, но должны стать понятными, если вы знаете, какое время он должен представлять. Как только вы это узнаете, измените приведенное выше выражение, чтобы исправить единицы, и, возможно, при необходимости вызовите convert_tz.

Да, это боль. Мы сделаем это автоматически c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...