将 DatetimeOffset 数据导入 Snowflake

将 DatetimeOffset 数据导入 Snowflake

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

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

我附加了 PARQUET 形式的源数据示例以及用于将数据导入 Snowflake 的 SQL 脚本示例。

任何帮助都将非常有帮助!

SQL Server 源数据屏幕截图

具有错误偏移量的 Snowflake 目标数据库

PARQUET 文件链接

SQL 脚本:

USE DATABASE DEMO_WH;
USE WAREHOUSE DEMO_WH;
DROP TABLE IF EXISTS "alex_test"."DATETIMEOFFSETTABLETEST";
CREATE TRANSIENT TABLE "alex_test"."DATETIMEOFFSETTABLETEST"("TASKEXECUTIONID" INTEGER NULL ,"LOADDATETIME" TIMESTAMP NULL ,"DATANAME" VARCHAR(50) NULL ,"DATE" TIMESTAMP_TZ NULL ,"DATE_NTZ" TIMESTAMP NULL );
COPY INTO "alex_test"."DATETIMEOFFSETTABLETEST" FROM ( SELECT 3923, CAST('2019-10-13 23:22:14.951' AS TIMESTAMP_NTZ(9)), $1:"DataName"::VARCHAR, $1:"Date"::TIMESTAMP, $1:"Date_NTZ"::TIMESTAMP FROM @~/DGStg/dbo.DatetimeOffsetTableTest.parquet) FILE_FORMAT =(TYPE = 'PARQUET' BINARY_AS_TEXT = FALSE );

答案1

-- 在 Snowflake 中您可以查看当前的时区此命令的参数(默认为 America/Los_Angeles):

show parameters like 'TIMEZONE' in account;

-- 您可以查看当前时间戳_类型_映射此命令的参数(默认是没有时区TIMESTAMP_NTZ)

show parameters like 'timestamp_type_mapping' in account;

-- 如果您想更改用户/会话/帐户的参数,您可以执行以下操作:

alter account SET TIMEZONE = "UTC";

-- 如果您的时区设置为 UTC,则您提供的复制语句将获得与 SQL Server 相同的结果:

COPY INTO DATETIMEOFFSETTABLETEST FROM ( SELECT 3923, CAST('2019-10-13 23:22:14.951' AS TIMESTAMP_NTZ(9)), $1:DataName::VARCHAR, $1:Date::TIMESTAMP, $1:Date_NTZ::TIMESTAMP FROM @my_aws_stage/stack) FILE_FORMAT =(TYPE = 'PARQUET' BINARY_AS_TEXT = FALSE );

-- 如果出于某种原因你不想更改时区,你可以使用 UTC 插入转换时区功能:

COPY INTO DATETIMEOFFSETTABLETEST FROM ( SELECT 3923, CAST(convert_timezone('UTC','2019-10-13 23:22:14.951') AS TIMESTAMP_NTZ(9)), $1:DataName::VARCHAR, convert_timezone('UTC','UTC',$1:Date)::TIMESTAMP, convert_timezone('UTC','UTC',$1:Date_NTZ)::TIMESTAMP FROM @my_aws_stage/stack) FILE_FORMAT =(TYPE = 'PARQUET' BINARY_AS_TEXT = FALSE );

https://docs.snowflake.net/manuals/user-guide/date-time-examples.html https://docs.snowflake.net/manuals/sql-reference/functions/convert_timezone.html#convert-timezone

相关内容