Snowflake CSV文件格式无法按预期处理时间戳



我在Snowflake中有一个带有时间戳列的表,定义如下:

last_updated_utc TIMESTAMP_NTZ NOT NULL

我有一个CSV文件格式定义如下:

CREATE FILE FORMAT IF NOT EXISTS MY_DATABASE.MY_SCHEMA.assets_format
TYPE = CSV
COMPRESSION = AUTO
FIELD_DELIMITER = '|'
SKIP_HEADER = 1
SKIP_BLANK_LINES = TRUE
DATE_FORMAT = 'YYYY-MM-DD'
TIME_FORMAT = 'HH:MI:SS.FFTZH'
TIMESTAMP_FORMAT = 'YYYY-MM-DDTHH:MI:SS.FFTZH'
TRIM_SPACE = TRUE

我遇到的问题是,如果我试图使用以下复制语句复制暂存数据:

COPY INTO MY_DATABASE.MY_SCHEMA.my_table 
FROM (SELECT s.$1, s.$2, s.$3, s.$4, s.$5, s.$6, s.$7, s.$8, 
s.$9 IF s.$9 IS NOT NULL ELSE '', s.$10, s.$11, s.$12, 
s.$13, s.$14, s.$15, s.$16
FROM @MY_DATABASE.MY_SCHEMA.%my_table/Pdata s)
FILE_FORMAT = ( FORMAT_NAME = 'MY_DATABASE.MY_SCHEMA.assets_format' )
PATTERN = '.*[.]csv[.]gz' 
PURGE = TRUE 
ON_ERROR = 'SKIP_FILE'

我得到以下错误,在文件中很深:

无法识别时间戳"2022-08-11T00:00:00Z"。

我认为这是我如何定义时间戳格式的问题,所以我尝试了以下操作:

USE DATABASE MY_DATABASE;
ALTER SESSION SET TIMESTAMP_INPUT_FORMAT = 'YYYY-MM-DDTHH:MI:SS.FFTZH';
SELECT TO_TIMESTAMP_NTZ('2022-08-11T00:00:00Z')

但这起到了作用。所以,我不确定我到底做错了什么。

有趣的是,默认TIMESTAMP_INPUT_FORMAT:

ALTER SESSION UNSET TIMESTAMP_INPUT_FORMAT;
select column1
,try_to_timestamp(column1) as t1
,try_to_timestamp_ntz(column1) as t2
,try_to_timestamp_ntz(column1, 'YYYY-MM-DDTHH:MI:SS.FFTZH') as t3
,try_to_timestamp_tz(column1, 'YYYY-MM-DDTHH:MI:SS.FFTZH') as t4
,try_to_timestamp_ntz(column1, 'YYYY-MM-DDTHH:MI:SS.FF') as t5
,try_to_timestamp_ntz(column1, 'YYYY-MM-DDTHH:MI:SS.FFZ') as t6
from values
('2022-08-11T00:00:00Z'),
('2022-08-11T00:00:00');

给出:

T5T6
COLUMN1T1T2T3T4
2022-08-11T00:00:00Z2022-08-11 00:00:00.000nullnull
2022-08-11 00:00:00.0002022-08-11 00:00:00.0002021-08-11 00:000:00.000

最新更新