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 size
是 partitioned
并且小于 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 个大小相同的文件(regularexport000000000000
和 regularexport000000000001
)。
场景二:
已分区 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.
看起来,如果您将 wildcards
与 partitioned table
一起使用,它会为 table 中的每个分区创建每个文件。
更新
当您使用 EXPORT DATA statement 时,您必须使用通配符,否则会出现错误:
Invalid uri specification. Option 'uri' value must be a wild card URI.
作为解决方法,您可以尝试使用 UI
或 bq
命令。可以在 this Issue Tracker
中找到更多详细信息
我有一个分区 table,目标分区中的数据少于 600MB
。
当我 运行 一个 EXPORT
查询带有一个 returns ~1000 rows
的子查询时,EXPORT
将数据分成 27(!)个文件。
这不是一个很大的查询结果。我假设它正在发生,因为优化器看到了 600MB
,但我不确定。
有没有人遇到过这个?我正在对结果进行 GZIP 压缩,因此连接将涉及再次解压缩、附加和压缩...
我在 BigQuery
中有 运行 多种不同的导出方案。我认为只有一个用例 BigQuery export
会导出多个文件,其中 Table size
是 partitioned
并且小于 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 个大小相同的文件(regularexport000000000000
和 regularexport000000000001
)。
场景二:
已分区 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.
看起来,如果您将 wildcards
与 partitioned table
一起使用,它会为 table 中的每个分区创建每个文件。
更新
当您使用 EXPORT DATA statement 时,您必须使用通配符,否则会出现错误:
Invalid uri specification. Option 'uri' value must be a wild card URI.
作为解决方法,您可以尝试使用 UI
或 bq
命令。可以在 this Issue Tracker