当我将DatatimeOffset数据加载到Snowflake中时,偏移量默认为美国时区/ Los_Angeles。
除此以外,我唯一的问题是如何通过TIMESTAMP_TZ字段维护提供的UTC偏移量?
我还尝试将包含TIMEZONE_TZ的数据复制到另一个表中,并且偏移量不会被覆盖。仅当您从外部来源导入数据时,这种情况才会发生。
我希望导入到Snowflake中的数据将保留现有的Datatimeoffset,并且不会被Snowflake表覆盖。
我也尝试使用TIMEZONE_LTZ并遇到相同的错误。
经过编辑以包含问题的屏幕截图。
答案 0 :(得分:1)
请阅读TIMESTAMP_LTZ , TIMESTAMP_NTZ , TIMESTAMP_TZ之间的区别。
您必须使用满足您要求的三个之一。从您的示例看来,您正在混合使用它们。当然,您可以同时拥有TZ和NTZ列,但是可以通过转换为其他任何东西来存储TZ时间偏移量。在TIMESTAMP
期间投射到COPY into <table>
。
TIMESTAMP
取决于TIMESTAMP_TYPE_MAPPING参数,默认为TIMESTAMP_NTZ
,没有时区偏移。
如果要保留混合偏移量,则必须使用TIMESTAMP_TZ
,例如:
CREATE OR REPLACE TABLE T AS
SELECT TO_TIMESTAMP_TZ('2019-10-29 02:58:23.123-05:00', 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM') T
UNION ALL
SELECT TO_TIMESTAMP_TZ('2019-10-28 23:58:23.123-08:00', 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM');
(附带说明:请不要在上方使用UNION
,这两个时间戳在不同区域中是相同的时间,并且将成为一个)
因此:如果要保留不同的偏移量,请使用TIMESTAMP_TZ
;如果要将所有内容都转换为会话TIMESTAMP_LTZ
,请使用TIMEZONE
;否则,请使用TIMESTAMP_NTZ
不需要偏移量(如果使用时区格式,可能会显示为UTC / Z)。
答案 1 :(得分:0)
时间戳数据的时区由设置为参数TIMEZONE的值控制,其默认值为'America / Los_Angeles'。您可以通过以下查询进行检查。
show parameters like '%timezone%';
要将其设置为UTC,请运行以下查询。
alter account set timezone = 'UTC';
可以在帐户级别,会话级别和用户级别设置此参数。请参阅下面的链接以获取更多详细信息。
https://docs.snowflake.net/manuals/sql-reference/parameters.html#timezone