雪花解释时间戳错误?

时间:2021-06-03 21:06:20

标签: json timestamp snowflake-cloud-data-platform

我正在通过 Snowflake 将一堆半结构化数据 (JSON) 加载到我的数据库中。条目中的时间戳值是 javascript 时间戳,如下所示: "time": 1621447619899

Snowflake 会自动将其转换为如下所示的时间戳变量: 53351-08-15 22:04:10.000

到目前为止一切都很好。但是,我认为新的时间戳是错误的。实际日期时间应在 2021 年 5 月 19 日美国东部时间下午 12 点左右。我读错了吗?是否取决于我的 Snowflake 实例所在的时区?

2 个答案:

答案 0 :(得分:0)

问题说 Snowflake 将其转换为 "53351-08-15 22:04:10.000" 看起来不错,但对我来说不正确。

当我在 Snowflake 中尝试输入数字时,我得到了这个:

select '1621447619899'::timestamp;

-- 2021-05-19T18:06:59.899Z

这更有意义。

您需要提供更多代码或上下文以进行进一步调试 - 但如果您告诉 Snowflake 将该数字转换为时间戳,您将获得正确的时间戳。

在此处查看 Snowflake 使用的规则:

答案 1 :(得分:0)

在 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,然后转换为时间戳,否则您会得到所得到的。