【发布时间】:2021-02-27 20:37:21
【问题描述】:
每次将 parquet 文件加载到 AWS S3 中的暂存位置时,我的管道都会执行 COPY INTO 命令,这一切正常(执行)。
这是我的副本查询:(摘要)
copy into table_name
from (
TRY_TO_DATE(
$1:int_field::varchar,
'YYYYMMDD'
) as date_field
from @"stage-location"/path/path2/ (FILE_FORMAT = > c000)
) ON_ERROR = "SKIP_FILE_1%" PATTERN = ".*part.*"
所以,我将 $1:int_field (type:int) 转换为 VARCHAR (::varchar),然后以 'YYYYMMDD' 格式将此 varchar 解析为 DATE。对符合这种格式的int_field来说效果很好,但是当字段为0时,加载失败(仅当被管道执行时)
当管道自己执行 COPY COMMAND 时,我检查了 COPY_HISTORY 并收到以下错误:
Can't parse '0' as date with format 'YYYYMMDD'
当然加载失败了... FAILED LOAD
事情变得有趣了:当我自己在工作表中执行这个相同的复制命令时,加载很顺利: OK LOAD
我试过了:
-
VALIDATE, VALIDATION_MODE, VALIDATE_PIPE_LOAD,但是这个函数不支持像我的那样在加载期间转换数据的 COPY INTO 语句。 -
FILE_FORMAT= (FORMAT_NAME=c000 DATE_FORMAT='YYYYMMDD') ON_ERROR = "SKIP_FILE_1%">>> SAME ISSUE,文件只有在我自己执行 COPY COMMAND 时才会加载。 - 我认为问题是“ON_ERROR”选项,但我无法删除它(我认为),我需要过滤 REAL 错误:(
可能是一些 SESSION 问题左右,我阅读了有关 DATE_INPUT_FORMAT 的 smthg,但我无法检测到解决此问题的确切问题。
有人可以帮助我吗?谢谢!
【问题讨论】:
-
你有样本文件看看我能不能重现吗?
-
当输入值为零时你想发生什么?由于如果 TRY_TO_DATE 无法转换值,则返回 null,为什么不将此语句包装在 IFNULL 语句中?
-
@FelipeHoffa 不,我很抱歉,但这是我工作的公司的机密......如果我有时间,我会复制类似的东西
-
@NickW 当输入值为 0 我希望文件无论如何加载到表中,使用 NULL 之类的字段,它可以工作,但只有当我执行 COPY INTO 查询时,如果 PIPE 执行它,它不起作用:(
-
嗨 - 请您添加完整的 CREATE PIPE 语句,包括 COPY 语句?您可以屏蔽任何可能是机密的内容,例如 AWS_SNS_TOPIC。此外,当您成功运行复制语句时,当源的值为零时,什么会加载到目标中?
标签: copy snowflake-cloud-data-platform stage parse-error snowflake-pipe