使用压缩的 AVRO 从 BigQuery 导出表

Posted

技术标签:

【中文标题】使用压缩的 AVRO 从 BigQuery 导出表【英文标题】:Exporting Tables from BigQuery with compressed AVRO 【发布时间】:2018-07-24 15:03:32 【问题描述】:

我正在尝试将 Big Query 导出到 Cloud Storage 功能以节省一些钱。需要的是压缩 AVRO 中的导出以保留模式,并在需要时能够在 Big Query 上再次导入它们。因为 Big Query 对未压缩大小的数据收费,而我的数据高度冗余, 所以它应该减少多达 20 倍的压缩。

在 UI 界面上,导出到 AVRO 时没有压缩选项。所以我认为这将是默认情况下,但事实并非如此。它在不压缩的情况下导出 AVRO,这对我来说毫无意义,因为文件将与表的大小相同,并且将其保存在 Big Query 和 Cloud Storage 中的成本相同。

https://cloud.google.com/bigquery/docs/exporting-data

没有任何相关信息。

任何人都知道是否有另一种方法,而不是在集群上导出和加载以转换为压缩的 AVRO 并再次保存而不保存云存储?

【问题讨论】:

【参考方案1】:

所以经过大量研究后,一位朋友发现查找 Big Query 库的 python 代码,有一些未记录的 AVRO 压缩选项可以传递给 API:DEFLATE 和 SNAPPY

之后我也在:https://developers.google.com/resources/api-libraries/documentation/bigquery/v2/java/latest/com/google/api/services/bigquery/model/JobConfigurationExtract.html#setCompression-java.lang.String-

我认为是新的,还没有文档,还没有出现在WEB界面上。

我测试了它并且可以工作!我的一张表,未经压缩的导出是 2.8GB 的​​ AVRO 文件,现在 DEFLATE 为 170MB。

【讨论】:

没错,BigQuery 中压缩 Avro 文件的可用选项是直接在 bq 命令中使用 DEFLATESNAPPY 选项-线。这个link已经提供了Avro export details官方文档提到这个方面。【参考方案2】:

我认为是新的,还没有文档

AVRO 的 DEFLATE 和 SNAPPY 压缩记录在 configuration.extract.compression

你也可以在 bq 命令行中看到它

bq help extract

尚未进入WEB界面

是的。 BigQuery UI 中不提供 AVRO 的压缩选项 - 经典 UI 和新 UI

应该可以在 API 和 bq 命令行以及任何已经为 AVRO 实现压缩的客户端库中使用

【讨论】:

以上是关于使用压缩的 AVRO 从 BigQuery 导出表的主要内容,如果未能解决你的问题,请参考以下文章

如何从具有 DATE 列的 BigQuery 表中导出 AVRO 文件并将其再次加载到 BigQuery

分区 BigQuery 表,从 AVRO 加载

推断 BigQuery 表加载的 avro 架构

从 AVRO 加载到 BigQuery - 在目标表中指定十进制类型

将 BigQuery 结果导出为 Avro 或 JSON

从 BigQuery 中的 .avro 文件创建表时出现“resourcesExceeded”错误