复制到运行良好但不加载数据 gzip 文件

Posted

技术标签:

【中文标题】复制到运行良好但不加载数据 gzip 文件【英文标题】:Copy into running fine but not loading data gzip file 【发布时间】:2020-07-31 04:32:32 【问题描述】:

我正在使用 talend 批量执行将数据从 s3 加载到雪花。 Talend tFileArchive 将文件转换为 gzip 格式 file.csv.gz 并将其上传到 s3 存储桶。通过 talend 批量组件执行的复制如下所示。它不会抛出错误或其他东西,但也不会加载数据。如果我尝试在没有 zip 的情况下加载 csv 文件,它可以正常工作。

File: file.csv.gz

Copy into table
    from 's3://bucket/'
    credentials=(aws_key_id='' aws_secret_key='')
    FILE_FORMAT=(type=csv compression=gzip field_delimeter=',' skip_header=1 field_optionally_enclosed_by='\"' empty_field_as_null=true)
    force=true

有人能指出问题出在哪里吗?即使我通过雪花 UI 执行上述命令,它也说运行成功但没有加载。文件有数据。

谢谢

【问题讨论】:

当您对该表运行 VALIDATE() 函数时,您会看到什么?你看到错误记录了吗? docs.snowflake.com/en/sql-reference/functions/validate.html 它不会出错,如果我将 csv 文件保存到相同的 s3 存储桶位置,它会毫无问题地拾取 csv 文件并加载它,它还会选择 csv.gz 文件但不会加载数据, row_parsed =0 显示在那里, 不需要出错就可以使用 validate() 函数。如果你运行它,你会看到什么回报? 另外,可能发生的情况是 COPY INTO 语句未在存储桶中找到文件。因此,它成功处理了 0 个文件。如果是这种情况,您可能对存储桶有权限问题。尝试使用凭据在 Snowflake 中设置一个阶段到该位置,然后运行 ​​LIST 命令以查看它是否“看到”文件。 感谢您的回复,这是 talend 端的配置问题,在压缩文件时,它正在创建 0 字节文件,因此导致了问题。 【参考方案1】:

查看表的 COPY 历史记录以查看是否引发了错误。然后尝试列出您的 S3 存储桶中的文件,以确保您的 STAGE 正常工作。

SELECT *
FROM TABLE(information_schema.copy_history(table_name=>'YourDatabase.YourSchema.YourTable'
                                           , start_time=> dateadd(days, -1, current_timestamp())));   

LIST @YourStage
OR
LIST 's3://bucket/'

还要确保您在有权查看 s3 存储桶并写入目标表的角色下执行 COPY INTO 语句。

【讨论】:

以上是关于复制到运行良好但不加载数据 gzip 文件的主要内容,如果未能解决你的问题,请参考以下文章

当“自动”将数据从 S3 加载到 Redshift 表中时,大小写是不是重要? [复制]

linux如何复制文件夹下所有文件但不复制子目录

databricks spark sql复制到不加载数据

SSIS包中的错误将数据加载到azure数据仓库中

使用 MapReduce API 通过 Gzip 压缩复制 HDFS 内的文件

clipboard.js实现复制功能