Snowflake External Table 无法将变体值 NULL 转换为 DATETIME/TIMESTAMP_NTZ 类型
Snowflake External Table failed to cast variant value NULL to DATETIME/TIMESTAMP_NTZ type
创建了一个外部 table,其中有一列类型为日期时间(TIMESTAMP_NTZ 类型),外部阶段有一个 csv 文件,该列中的值为空。从外部选择 table 给出
"Failed to cast variant value "null" 到 TIMESTAMP_NTZ"
CREATE OR REPLACE EXTERNAL TABLE ext_table_datetime (
col1 datetime as (value:c1::datetime)
)
with location = 's3://bucket_name'
file_format = file_format_1
auto_refresh = true;
我还定义了如下文件格式,它适用于外部 table 具有空值的其他列类型(varchar 等),也适用于常规 table 中的日期时间类型。所以,基本上只是不适用于具有日期时间类型的外部 table。
CREATE OR REPLACE FILE FORMAT file_format_1 type = 'CSV'
field_delimiter = ','
ESCAPE_UNENCLOSED_FIELD = NONE
SKIP_HEADER=1
NULL_IF = 'null';
关于如何将 load/sync 空值转换为外部 table 日期时间类型有什么想法吗?
您是否尝试过在 EXTERNAL TABLE 定义中使用 NULLIF
函数:
CREATE OR REPLACE EXTERNAL TABLE ext_table_datetime (
col1 datetime as (NULLIF(value:c1,'null')::datetime)
)
with location = 's3://bucket_name'
file_format = file_format_1
auto_refresh = true;
此外,由于这是 Snowflake 的预览功能,我建议您开一张支持票。您的格式文件的 NULL_IF 参数可能会按照您的预期为您处理此问题。
创建了一个外部 table,其中有一列类型为日期时间(TIMESTAMP_NTZ 类型),外部阶段有一个 csv 文件,该列中的值为空。从外部选择 table 给出 "Failed to cast variant value "null" 到 TIMESTAMP_NTZ"
CREATE OR REPLACE EXTERNAL TABLE ext_table_datetime (
col1 datetime as (value:c1::datetime)
)
with location = 's3://bucket_name'
file_format = file_format_1
auto_refresh = true;
我还定义了如下文件格式,它适用于外部 table 具有空值的其他列类型(varchar 等),也适用于常规 table 中的日期时间类型。所以,基本上只是不适用于具有日期时间类型的外部 table。
CREATE OR REPLACE FILE FORMAT file_format_1 type = 'CSV'
field_delimiter = ','
ESCAPE_UNENCLOSED_FIELD = NONE
SKIP_HEADER=1
NULL_IF = 'null';
关于如何将 load/sync 空值转换为外部 table 日期时间类型有什么想法吗?
您是否尝试过在 EXTERNAL TABLE 定义中使用 NULLIF
函数:
CREATE OR REPLACE EXTERNAL TABLE ext_table_datetime (
col1 datetime as (NULLIF(value:c1,'null')::datetime)
)
with location = 's3://bucket_name'
file_format = file_format_1
auto_refresh = true;
此外,由于这是 Snowflake 的预览功能,我建议您开一张支持票。您的格式文件的 NULL_IF 参数可能会按照您的预期为您处理此问题。