将DatetimeOffset数据导入到Snowflake

时间:2019-10-29 02:19:02

标签: sql snowflake-data-warehouse

当我将DatatimeOffset数据加载到Snowflake中时,偏移量默认为美国时区/ Los_Angeles。

除此以外,我唯一的问题是如何通过TIMESTAMP_TZ字段维护提供的UTC偏移量?

我还尝试将包含TIMEZONE_TZ的数据复制到另一个表中,并且偏移量不会被覆盖。仅当您从外部来源导入数据时,这种情况才会发生。

Source Database

Snowflake Table Creation

Importing Data into Snowflake

Target Snowflake Database

我希望导入到Snowflake中的数据将保留现有的Datatimeoffset,并且不会被Snowflake表覆盖。

我也尝试使用TIMEZONE_LTZ并遇到相同的错误。

经过编辑以包含问题的屏幕截图。

2 个答案:

答案 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