雪花解释时间戳错误?
Posted
技术标签:
【中文标题】雪花解释时间戳错误?【英文标题】:Snowflake interpreting timestamp wrong? 【发布时间】:2021-06-03 21:06:20 【问题描述】:我正在通过 Snowflake 将一堆半结构化数据 (JSON) 加载到我的数据库中。条目中的时间戳值是 javascript 时间戳,如下所示:
"time": 1621447619899
Snowflake 自动将其转换为如下所示的时间戳变量:
53351-08-15 22:04:10.000
.
到目前为止一切顺利。但是,我认为新的时间戳是错误的。实际日期时间应在 2021 年 5 月 19 日 MDT 中午 12 点左右。我读错了吗?它是否取决于我的 Snowflake 实例所在的时区?
【问题讨论】:
如果值1621447619899
在 JSON 属性中,则 Snowflake 中根本没有该数据的“自动”转换。它将始终将该值视为 JSON 对象,直到您将其转换为其他对象。如果您可以提供将 JSON 属性解析为时间戳值的代码,那将很有帮助。
嘿迈克,请参阅下面我对菲利普的回复。你知道为什么value:time::timestamp
没有正确解析 JSON 吗?我的所有其他值都正确地从该 JSON 中解析出来。
【参考方案1】:
在 SQL 中手动比较以下选项时:
with x as (
SELECT parse_json('time:1621447619899') as var
)
SELECT var:time,
var:time::number,
var:time::varchar::timestamp,
1621447619899::timestamp,
'1621447619899'::timestamp,
var:time::timestamp
FROM x;
看来您要做的是执行以下操作:
var:time::varchar::timestamp
查看文档,它确实看起来 to_timestamp 正在寻找作为字符串的数字,因此您需要先转换为 varchar,然后再转换为时间戳,否则您将得到您所得到的。
【讨论】:
谢谢,@MattNorton。请务必将解决方案标记为您选择的解决方案并勾选答案。【参考方案2】:问题说 Snowflake 将其转换为“53351-08-15 22:04:10.000”看起来不错,但对我来说看起来不对。
当我在 Snowflake 中尝试输入数字时,我得到了这个:
select '1621447619899'::timestamp;
-- 2021-05-19T18:06:59.899Z
这更有意义。
您需要提供更多代码或上下文以进行进一步调试 - 但如果您告诉 Snowflake 将该数字转换为时间戳,您将得到正确的时间戳。
在此处查看 Snowflake 使用的规则:
https://docs.snowflake.com/en/sql-reference/functions/to_timestamp.html#usage-notes【讨论】:
谢谢费利佩!我想我只是说它在格式上看起来是正确的——但值显然是错误的。这是我用来将值转换为时间戳的代码:create or replace table AudienceEntries as select value:time::timestamp as Time from table , lateral flatten (input => v:entries);
我只是尝试将 value:time 导入为字符串和 int,然后将该列转换为时间戳。两个选项都失败,并出现错误“无法将 TIME 列从 VARCHAR(16777216) 类型更改为 TIMESTAMP_NTZ(9)”或“无法将 TIME 列从 NUMBER(38,0) 类型更改为 TIMESTAMP_NTZ(9)”
能否分享一下json对象,让我重现一下?以上是关于雪花解释时间戳错误?的主要内容,如果未能解决你的问题,请参考以下文章