【问题标题】:Snowflake - Fail COPY INTO (Can't parse '0' as date with format 'YYYYMMDD')Snowflake - COPY INTO 失败(无法将 '0' 解析为格式为 'YYYYMMDD' 的日期)
【发布时间】: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


【解决方案1】:

在我的测试中,我发现它总是失败(即使是独立的 COPY 也不起作用)。另一方面,从暂存文件中查询按预期工作。

select TRY_TO_DATE(
      $1::varchar,
      'YYYYMMDD'
) as date_field
from @my_stage; -- works

copy into testing
from (
select 
   TRY_TO_DATE(
      $1::varchar,
      'YYYYMMDD'
)
  from @my_stage
) ON_ERROR = "SKIP_FILE_1%"; -- fails with "Date '0' is not recognized"

在作为 COPY 转换的一部分运行时,TRY_TO_DATE 似乎存在问题。顺便说一句,我测试了 TRY_TO_NUMBER,它确实有效。

您应该向 Snowflake 支持提交案例,以便开发团队可以调查该问题。

【讨论】:

  • 感谢您测试该问题,我将联系 Snowflake 支持团队并在此处发布他们的答案,以便我可以帮助其他人!
猜你喜欢
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多