Snowflake table 不接受日期字段中的空值

Snowflake table is not accepting null values in date field

我在 snowflake 中有一个 table,我正在执行批量加载使用。 table 中的一列是日期,但在 sql 服务器上的源 table 中,日期列中有空值。

数据流如下:

sql_server-->S3 存储桶 -->snowflake_table

我可以在 EMR 中执行 sqoop 作业,但无法将数据加载到雪花 table,因为它不接受日期列中的空值。

错误是:

Date '' is not recognized File 'schema_name/table_name/file1', line 2, character 18 Row 2, 
column "table_name"["column_name":5] If you would like to continue loading when an error is 
encountered, use other values such as 'SKIP_FILE' or 'CONTINUE' for the ON_ERROR option.

任何人都可以帮忙,我想念的地方

错误表明日期未以空值形式到达。相反,它们作为空白字符串到达​​。您可以通过几种不同的方式解决这个问题。

最简洁的方法是在该列的 COPY INTO 语句中使用 TRY_TO_DATE 函数。当尝试将空白字符串转换为日期时,此函数 return 数据库将为空:

https://docs.snowflake.com/en/sql-reference/functions/try_to_date.html#try-to-date

使用下面的命令,您可以看到阶段文件中的值:

select t., t. from @mystage1 (file_format => myformat) t;

根据数据,您可以如下更改复制命令:

COPY INTO my_table(col1, col2, col3) from (select , , try_to_date() from @mystage1) 
file_format=(type = csv FIELD_DELIMITER = '\u00EA' SKIP_HEADER = 1 NULL_IF = ('') ERROR_ON_COLUMN_COUNT_MISMATCH = false EMPTY_FIELD_AS_NULL = TRUE)  
    on_error='continue'