Snowpipe 无法读取由 BigQuery 导出的 DEFLATE 压缩的 AVRO

Posted

技术标签:

【中文标题】Snowpipe 无法读取由 BigQuery 导出的 DEFLATE 压缩的 AVRO【英文标题】:Snowpipe fails to read AVRO compressed by DEFLATE exported from BigQuery 【发布时间】:2021-08-12 18:40:40 【问题描述】:

我正在尝试将从 BigQuery 导出的数据导入为 AVRO 并压缩为 DEFLATE。除了 NONE 之外,两者唯一共同的编码是 DEFLATE。 我正在导出具有 13,343,598 行的公开可用数据集 bigquery-public-data:covid19_open_data.covid19_open_data 之一。我正在使用以下命令导出:

bq extract --destination_format=AVRO --compression=DEFLATE bigquery-public-data:covid19_open_data.covid19_open_data gs://staging/covid19_open_data/avro_deflate/covid19_open_data_2_*.avro

该命令在 GCP 中创建 17 个文件。当我使用命令查询文件中的数据时:

SELECT count(*) FROM @shared.data_warehouse_ext_stage/covid19_open_data/avro_deflate;

我只得到 684,5021 行的计数。为了解决管道中的错误,我发出命令:

SELECT * from table(information_schema.copy_history(table_name=>'covid19_open_data', start_time=> dateadd(hours, -1, current_timestamp())));

管道报错如下:

文件解压时遇到无效数据:“covid19_open_data_3_000000000006.avro”,使用的压缩类型:“DEFLATE”,原因:“数据错误”

文件格式命令的 SQL 是:

CREATE OR REPLACE FILE FORMAT monitoring_blocking.dv_avro_deflate_format TYPE = AVRO COMPRESSION = DEFLATE;

我知道这个问题只与压缩压缩有关。 AVRO 只有两种压缩方式对于 BigQuery 和 Snowflake NONE 和 DEFLATE 都是通用的。我还创建了两个管道,一个文件格式为 AVRO,压缩为 NONE,第二个文件格式为 CSV 和 GZIP。它们都将数据加载到表中。除了文件格式之外,这两个 AVRO 管道是彼此的镜像。这是管道的 SQL 的 sn-p:

创建或替换管道 covid19_open_data_avro AUTO_INGEST = 真 INTEGRATION = 'GCS_PUBSUB_DATA_WAREHOUSE_NOTIFICATION_INT' AS 复制到 covid19_open_data( location_key ,日期 ,place_id ,wikidata_id ... ) 从 (选择 $1:location_key ,$1:date 作为日期 ,$1:place_id AS place_id ,$1:wikidata_id 作为 wikidata_id ... 来自@shared.staging/covid19_open_data/avro_deflate) FILE_FORMAT = monitoring_blocking.dv_avro_deflate_format;

【问题讨论】:

如果无压缩版本可以工作,这听起来像是一个错误。我很想获取未压缩的 AVRO 文件并在本地压缩它们,然后尝试加载它们。如果可行,则意味着它是写入层,并且如果本地压缩无法加载,则说明是雪花处理。这可以通过翻转测试进行双重检查,并在本地解压缩压缩的输出文件,并检查雪花是否可以读取那些,这再次消除了写入阶段。最后一点,与文件流压缩相比,这仅在对整个文件进行压缩时才有效。 如果是 Snowflake 错误,我会开一张支持票。包括您的详细复制品。 顺便说一句,这个 covid 数据是问题的样本,还是导出的目标? Snowflake 已经在 Marketplace 上提供了一个很棒的 COVID-19 数据提供程序,如果您需要的话:snowflake.com/datasets/starschema-covid-19-epidemiological-data -- 无论如何,这是在 Snowflake 方面解决的一个很好的 Avro 问题。 【参考方案1】:

问题在于雪花。当我们将 FILE FORMAT 定义中的压缩格式更改为 AUTO 时,它起作用了

CREATE OR REPLACE FILE FORMAT my_schema.avro_compressed_format
TYPE = AVRO
COMPRESSION = DEFLATE;

CREATE OR REPLACE FILE FORMAT my_schema.avro_compressed_format
TYPE = AVRO
COMPRESSION = AUTO;

【讨论】:

以上是关于Snowpipe 无法读取由 BigQuery 导出的 DEFLATE 压缩的 AVRO的主要内容,如果未能解决你的问题,请参考以下文章

Snowpipe 云消息传递机制如何在 Azure 上准确运行?

如何对 Snowpipe 自动摄取故障进行故障排除?

BigQuery:无法将 TIMESTAMP_MICROS 类型的字段“stamp”读取为 DATETIME

在 gcp 中读取和写入 bigquery。啥服务?

我无法在 datalab 中查阅 bigquery 表?

我怎么能忽略'|'管道分隔符在 Google BigQuery 中读取 Google 表格数据?