Значения 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.