【问题标题】:Importing DatetimeOffset Data into Snowflake将 DatetimeOffset 数据导入 Snowflake
【发布时间】:2019-10-30 09:24:55
【问题描述】:

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

除此之外我唯一的问题是我们如何使用 TIMESTAMP_TZ 字段维护提供的 UTC 偏移量?

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

Source Database

Snowflake Table Creation

Importing Data into Snowflake

Target Snowflake Database

我希望导入 Snowflake 的数据能够保留现有的 Datatimeoffset 并且不会被 Snowflake Table 覆盖。

我也尝试使用 TIMEZONE_LTZ 并且遇到了同样的错误。

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

【问题讨论】:

  • 坏消息线索:尝试将 TZ 列卸载到镶木地板时,我得到以下信息:卸载到 PARQUET 时遇到错误:TIMESTAMP_TZ 和 LTZ 类型不支持卸载到 Parquet。
  • 我还尝试从 CSV 文件加载 TZ 数据,效果非常棒。

标签: sql snowflake-cloud-data-platform


【解决方案1】:

请阅读TIMESTAMP_LTZ , TIMESTAMP_NTZ , TIMESTAMP_TZ之间的区别。

您必须使用适合您要求的三个之一。从您的示例看来,您正在混合它们。当然,您可以同时拥有 TZ 和 NTZ 列,但是 TZ 时间偏移会通过转换为其他任何内容来破坏,例如。在COPY into <table> 期间转换为TIMESTAMP

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,如果您想将所有内容转换为会话,请使用TIMEZONETIMEZONE,如果您不想要偏移量,请使用TIMESTAMP_NTZ(可能会显示如果您使用时区格式,则为 UTC/Z)。

【讨论】:

  • 嗨,汉斯,感谢您的回复。我更新了我的问题以包含正确格式的表创建脚本屏幕截图,从而更清楚地表明我们正在使用 TIMEZONE_TZ。我也尝试了TIMEZONE_LTZ,但没有成功。
  • @MatthewAylward 小心在 stackoverflow 中包含文本的屏幕截图而不是真实的文本,因为我看到人们因为这种形式而被低估了。
  • 似乎只有在将数据作为 parquet 文件导入时才会出现问题。感谢您的帮助!
【解决方案2】:

时间戳数据的时区由设置为参数 TIMEZONE 的值控制,其默认值为“America/Los_Angeles”。您可以使用以下查询进行检查。

show parameters like '%timezone%';

要将其设置为 UTC,请运行以下查询。

alter account set timezone = 'UTC';

该参数可以在账户级别、会话级别和用户级别进行设置。有关详细信息,请参阅下面的链接。

https://docs.snowflake.net/manuals/sql-reference/parameters.html#timezone

【讨论】:

  • 感谢沙市的回复!我的问题与导入时丢失附加偏移量的数据有关。无论雪花数据库的时区是正确的,它都应该支持这些数据吗?我编辑了我的问题以包含屏幕截图以澄清我的问题。
  • @MatthewAylward,在这种情况下,我建议将数据存储为字符串。您可以使用“::timestamp”将其转换为任何处理的时间戳。这样可以保留偏移值。
猜你喜欢
  • 1970-01-01
  • 2023-02-20
  • 1970-01-01
  • 1970-01-01
  • 2020-02-01
  • 2020-03-08
  • 2020-03-07
  • 2020-01-12
  • 1970-01-01
相关资源
最近更新 更多