大查询是不是为标准 SQL 执行 __TABLES_SUMMARY__

Posted

技术标签:

【中文标题】大查询是不是为标准 SQL 执行 __TABLES_SUMMARY__【英文标题】:Does big query executes __TABLES_SUMMARY__ for standard SQL大查询是否为标准 SQL 执行 __TABLES_SUMMARY__ 【发布时间】:2020-05-14 07:45:16 【问题描述】:

我们在 Big Query 中有一个包含超过 500000 个表的数据集,当我们使用旧版 SQL 对该数据集运行查询时,它会引发错误

按照 Jordan Tigani 的说法,它执行 SELECT table_id FROM .TABLES_SUMMARY 以获取要查询的相关表 How do I use the TABLE_QUERY() function in BigQuery?

使用 _TABLE_SUFFIX(标准 SQL)的查询是否执行 TABLES_SUMMARY 以获取要查询的相关表?

【问题讨论】:

“它抛出一个错误” - 什么查询,什么错误? 嗨 Felipe,它抛出了以下错误原因:resourcesExceeded,消息:查询执行期间资源超出:数据集元表 :.__TABLES_SUMMARY__ 中的表太多,超过 500000 个限制。 【参考方案1】:

根据documentation TABLE_SUFFIX 是一个伪列,其中包含与表通配符匹配的值,它在StandardSQL 中是唯一可用的。同时,__TABLE_SUMMARY_ 是一个元表,其中包含有关数据集中表的信息,并且在 标准旧版 SQL 中可用。因此,它们有两个不同的概念。

但是,在 StandardSQL 中,您可以使用 INFORMATION_SCHEMA.TABLES 检索有关所选数据集中表的信息,类似于 __TABLE_SUMMARY_。 Here 您可以找到使用示例及其limitations。

下面,我使用两种方法查询了一个公共数据集:

首先,使用INFORMATION_SCHEMA.TABLES

SELECT * FROM `bigquery-public-data.noaa_gsod.INFORMATION_SCHEMA.TABLES` 

以及部分输出:

其次,使用__TABLES_SUMMARY__

SELECT * FROM `bigquery-public-data.noaa_gsod.__TABLES_SUMMARY__`

还有部分输出表,

如您所见,对于每种方法,输出都有一个特定的。尽管如此,两者都检索有关特定数据集中表的元数据。

注意:BigQuery 的查询有配额。此配额适用于某些情况,包括单个查询可以引用的表数,即每个查询 1000 个,here。

【讨论】:

您好 Alexandre,感谢您的回复。但它没有回答我的问题。当您使用 TABLE_QUERY 对 legacy 运行查询时,默认情况下它将执行 TABLES_SUMMARY 以获取 table_ids,然后运行实际查询。意味着额外的查询将在内部以类似方式运行,当您使用 _TABLE_SUFFIX 在标准上运行查询时,是否会运行任何额外的查询来获取 table_ids(就像您给出的 INFORMATION_SCHEMA.TABLES 一样)?? 嗨@SaiVijay,在 StandardSQL 中,INFORMATION_SCHEMA.TABLES 检索数据集中每个表的元数据。当您运行它时,您可以检查作业执行详细信息以检查作业的行为方式。此外,您还可以查看使用此方法将扫描多少数据。同时,_TABLE_SUFFIX 不会为您提供有关表的任何元数据,它只是选择/返回通配符匹配的所有表。如果你运行SELECT _TABLE_SUFFIX as suffix FROM bigquery-public-data.noaa_gsod.*,它不会扫描任何数据,因为它是一个伪列。我回答你的问题了吗?【参考方案2】:

不,使用通配符表查询不会执行 TABLES_SUMMARY。您可以在数据集中拥有超过 500k 的表,但它确实要求与前缀模式匹配的表的数量少于 500k。对于通配符表的其他限制,您可以参考documentation。

【讨论】:

以上是关于大查询是不是为标准 SQL 执行 __TABLES_SUMMARY__的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 查询中使用来自 __TABLES_SUMMARY__ 的 table_id 来选择表

在对象上存储 sql 查询

Mysql_01

常用SQL_官方文档使用

sql mysql__show_tables.sql

Oracle Sql 查询一条记录大数据中的报表