如何在写入 Snowflake 时使用 Spark/PySpark 将timestamp_ntz类型转换为 CST 格式



正如我们所知,我们在雪花中有 3 个时间戳,

  1. TIMESTAMP_NTZ
  2. TIMESTAMP_LTZ
  3. TIMESTAMP_TZ

因此,在将时间戳写入雪花表时,默认情况下需要TIMESTAMP_NTZ。 雪花在写入雪花表时如何获取 CST 时区的时间戳?

首先,重要的是要知道哪个时区被设置为您的帐户/会话的默认时区:

SHOW PARAMETERS LIKE 'TIMEZONE';

然后将会话的默认值更改为 CST

ALTER SESSION SET TIMEZONE = 'America/Chicago';

此后,任何选择current_timestamp都将在正确的时区提供数据

SELECT CURRENT_TIMESTAMP;

这是一篇很好的参考文章: 雪花时间戳数据类型参考

假设您可以控制表中的精确列类型,我发现TIMESTAMP_TZ是您想要定义表的方式。这是我所做的一切的工作示例:

alter session set timezone = 'America/Los_Angeles';
create or replace table ts_test(rn number, ts timestamp_tz);
insert into ts_test values(1, current_timestamp());
insert into ts_test values(2, '2019-12-10 07:50:00 -06:00');
insert into ts_test values(3, CONVERT_TIMEZONE('America/Chicago', CURRENT_TIMESTAMP()));
select * from ts_test;

如果时间戳是在代码中生成的,请确保在插入时包含 UTC 偏移量 (RN 2(。 如果您使用的是 current_timestamp(( 即 LA,请确保转换为 CST (rn 3(。

如果正在生成表,并且您不控制时区默认值,请先发出以下命令:

alter session set timestamp_type_mapping = timestamp_tz;

最新更新