S3的MemSQL管道将NULL插入DATE类型的列中

问题描述 投票:0回答:1

Memsql管道应该将数据从S3转储到列存储表中。源文件为ORC格式。然后将它们转换为实木复合地板。文件中的某些列具有DATE数据类型(yyyy-mm-dd)。

管道运行正常,但将NULL插入所有Date类型列。

amazon-s3 parquet memsql
1个回答
1
投票

DATE值可能以带有时间戳逻辑类型注释(https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#timestamp)的int64形式写入Parquet。 MemSQL目前不会自动将其转换为与兼容的格式DATETIME或TIMESTAMP,而是尝试将其分配给目标列,就像通过使用原始基础值分配一个整数文字来进行分配一样。出于MySQL兼容性的原因,这会给出NULL而不是错误,尽管set global data_conversion_compatibility_level="7.0"会使它出错。

您可以通过暂时将问题列设为TEXT类型并查看结果值来进行调查。如果它是整数字符串,则问题如上所述,可以使用SETCREATE 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

是的,这很痛苦。我们将使其自动化。

© www.soinside.com 2019 - 2024. All rights reserved.