我试着去创造。在雪花中稳定,确保时间戳是CURRENT_TIMESTAMP(),但使用UTC。下面是我正在使用的语法;
ALTER SESSION SET TIMEZONE = 'UTC';
CREATE OR REPLACE TABLE DATA_LAKE.CUSTOMER.ACT_PREDICTED_PROBABILITIES_DATAROBOT(
ACCOUNT_ID NUMBER NOT NULL PRIMARY KEY,
PREDICTED_PROBABILITY FLOAT,
TIME_PREDICTED TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);但是在这个表中插入行之后,我仍然可以得到美国/洛杉矶时间格式的时间。
479291 0.5797053576 2021-06-16 13:56:26.595我能得到关于如何获得UTC时间戳的帮助吗?感谢您的帮助。
发布于 2021-06-17 05:19:49
对于时间戳和时区之间的转换,有一些选项。我建议您熟悉一下three different kinds of timestamps
这是我们通常使用的:CONVERT_TIMEZONE('UTC', current_timestamp())::timestamp_ntz
无论Snowflake实例默认设置为哪个时区,转换都应将您转换为UTC。而timestamp_ntz (无时区)是没有任何时区信息的时间戳,如果您知道它将始终是协调世界时,那么它工作得很好。
如果不太了解你的用例,我很难给出一个关于你应该使用哪种时区数据类型的全心全意的建议。这段代码应该只需要很小的调整就可以更改数据类型。
编辑:更完整的测试示例
CREATE OR REPLACE TABLE DATA_LAKE.CUSTOMER.ACT_PREDICTED_PROBABILITIES_DATAROBOT(
ACCOUNT_ID NUMBER NOT NULL PRIMARY KEY,
TIME_PREDICTED1 TIMESTAMP_NTZ DEFAULT CONVERT_TIMEZONE('UTC',CURRENT_TIMESTAMP)::timestamp_ntz,
TIME_PREDICTED2 TIMESTAMP_NTZ DEFAULT CONVERT_TIMEZONE('America/Los_Angeles',CURRENT_TIMESTAMP)::timestamp_ntz
);
insert into DATA_LAKE.CUSTOMER.ACT_PREDICTED_PROBABILITIES_DATAROBOT (account_id)
select 1;
select * from DATA_LAKE.CUSTOMER.ACT_PREDICTED_PROBABILITIES_DATAROBOT;编辑2:我认为你的版本不能工作的原因是因为会话时区没有被default约束“记住”。该default将在将来的insert查询中使用任何会话时区,这是在这里显式指定时区的另一个原因。
发布于 2021-06-17 08:08:15
大卫的答案是有效的。您还必须将数据类型更改为TIMESTAMPNTZ
CREATE OR REPLACE TABLE DATA_LAKE.CUSTOMER.ACT_PREDICTED_PROBABILITIES_DATAROBO( ACCOUNT_ID NUMBER NOT NULL主键,PREDICTED_PROBABILITY FLOAT,TIME_PREDICTED TIMESTAMPNTZ DEFAULT CONVERT_TIMEZONE('UTC',current_timestamp())::TIMESTAMPNTZ );
https://stackoverflow.com/questions/68009973
复制相似问题