雪花在 TIMESTAMP_NTZ 列中显示“无效日期”

Posted

技术标签:

【中文标题】雪花在 TIMESTAMP_NTZ 列中显示“无效日期”【英文标题】:Snowflake shows 'Invalid date' in TIMESTAMP_NTZ column 【发布时间】:2021-09-22 20:33:20 【问题描述】:

在我们的 Snowflake 数据仓库实例中,当使用 COPY INTO DDL 语句将数据从阶段加载到表中时,timestamp_ntz 列中的一些记录在 Snowflake UI 中显示值 Invalid date

timestamp_ntz 列中的这些Invalid date 值具有以下特性:

它们不为 NULL 它们似乎总是被认为比任何其他时间戳都大,并且此属性可用于过滤它们,例如。 WHERE strange_timestamp_col > current_timestamp() 它们不是“前端”的东西,即。在 Snowflake UI 中 - 他们使用 Snowflake 中的数据破坏其他客户端

在尝试执行COPY INTO DDL 语句时,我们预计无效的数据格式会返回错误;而是插入了这些具有奇怪属性的邪恶伪时间戳。

【问题讨论】:

【参考方案1】:

我们发现分阶段 parquet 文件中的一些 unix 时间戳值被格式化为整数和字符串!

解决方案是始终将该列转换为 VARCHAR,然后再转换为 TIMESTAMP_NTZ。

使用 unix 时间戳的示例:

SELECT 1620502461213752::timestamp_ntz; -> Invalid date

SELECT 1620502461213752::varchar::timestamp_ntz; -> 2021-05-08 19:34:21.213

SELECT '1620502461213752'::timestamp_ntz; -> 2021-05-08 19:34:21.213

【讨论】:

只是澄清一下,您是说文件导入正常,但是当您查看最终表格中的数据时,它显示“日期无效”?这听起来不太可靠! 我完全同意;这是一个非常不可靠的体验。我们预计无效数据格式在尝试 COPY INTO DDL 时会引发错误。不幸的是,这并没有发生,我们在 timestamp_ntz 列中遇到了这些奇怪的 Invalid date 值。

以上是关于雪花在 TIMESTAMP_NTZ 列中显示“无效日期”的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库时间戳(6)转换为雪花timestamp_ntz时抛出错误

Snowflake SQL 错误 - 函数“-”的参数类型无效:(TIMESTAMP_NTZ(9), TIMESTAMP_NTZ(9))

使用“?::TIMESTAMP_NTZ”在查询中指定类型时,Snowflake JDBC 批量插入失败并显示“绑定变量?未设置”

雪花 - 无效的标识符

变体列中唯一元素的雪花查询性能

在时间戳列中插入 Null 时,雪花复制到失败