Pri*_*han 3 amazon-web-services amazon-emr snowflake-cloud-data-platform
我有一张雪花表,我正在使用它执行批量加载。表中的列之一是日期,但在 sql server 上的源表中,日期列中有空值。
数据流如下:
sql_server-->S3存储桶-->snowflake_table
我能够在 EMR 中执行 sqoop 作业,但无法将数据加载到雪花表中,因为它不接受日期列中的空值。
错误是:
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.
Run Code Online (Sandbox Code Playgroud)
谁能帮忙,我失踪的地方
该错误表明日期未以空值形式到达。相反,它们以空字符串的形式到达。您可以通过几种不同的方式解决这个问题。
最简洁的方法是在该列的 COPY INTO 语句中使用 TRY_TO_DATE 函数。当尝试将空白字符串转换为日期时,此函数将返回数据库 null:
https://docs.snowflake.com/en/sql-reference/functions/try_to_date.html#try-to-date
小智 5
使用以下命令您可以查看阶段文件中的值:
select t.$1, t.$2 from @mystage1 (file_format => myformat) t;
Run Code Online (Sandbox Code Playgroud)
根据数据,您可以更改复制命令,如下所示:
COPY INTO my_table(col1, col2, col3) from (select $1, $2, try_to_date($3) 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'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4189 次 |
| 最近记录: |