BigQuery EXPORT sql 正在分片小查询结果

BigQuery EXPORT sql is sharding small query results

我有一个分区 table,目标分区中的数据少于 600MB

当我 运行 一个 EXPORT 查询带有一个 returns ~1000 rows 的子查询时,EXPORT 将数据分成 27(!)个文件。

这不是一个很大的查询结果。我假设它正在发生,因为优化器看到了 600MB,但我不确定。

有没有人遇到过这个?我正在对结果进行 GZIP 压缩,因此连接将涉及再次解压缩、附加和压缩...

我在 BigQuery 中有 运行 多种不同的导出方案。我认为只有一个用例 BigQuery export 会导出多个文件,其中 Table sizepartitioned 并且小于 1 GB。它在导出期间使用 wildcards

BigQuery supports a single wildcard operator (*) in each URI. The wildcard can appear anywhere in the URI except as part of the bucket name. Using the wildcard operator instructs BigQuery to create multiple sharded files based on the supplied pattern.

我已经在分区和普通 table:

中使用 Public database 测试了这个
  • 已分区 table:bigquery-public-data.covid19_geotab_mobility_impact.us_border_wait_times
  • 正常 table: bigquery-public-data.covid19_google_mobility.mobility_report

场景一:

正常 table: bigquery-public-data.covid19_google_mobility.mobility_report

Table size - 771.81 MB
Number of rows - 7,254,927

当我正常导出此文件(使用 GZIP)时,我只有一个文件 (regularexportnowildcard)。当我使用 wildcard 时,它创建了 2 个大小相同的文件(regularexport000000000000regularexport000000000001)。

场景二:

已分区 table:bigquery-public-data.covid19_geotab_mobility_impact.us_border_wait_times

Table size - 540.25 MB
Number of rows - 870,064

当我正常导出分区 table 时,没有通配符,我只有一个文件 (nowildcardexport)。 但是,当我尝试用Wildcards导出Partitioned Table时,结果得到了586个文件。

如 GCP 文档所述Introduction to partitioned tables

A partitioned table is a special table that is divided into segments, called partitions, that make it easier to manage and query your data. By dividing a large table into smaller partitions, you can improve query performance, and you can control costs by reducing the number of bytes read by a query.

看起来,如果您将 wildcardspartitioned table 一起使用,它会为 table 中的每个分区创建每个文件。

更新

当您使用 EXPORT DATA statement 时,您必须使用通配符,否则会出现错误:

Invalid uri specification. Option 'uri' value must be a wild card URI.

作为解决方法,您可以尝试使用 UIbq 命令。可以在 this Issue Tracker

中找到更多详细信息