在 bigquery 上查询项目中的所有数据集和表?

Posted

技术标签:

【中文标题】在 bigquery 上查询项目中的所有数据集和表?【英文标题】:Query all datasets and tables within project on bigquery? 【发布时间】:2017-01-09 16:30:46 【问题描述】:

我目前正在尝试使用从 BigQuery 获得的数据创建自己的分析面板。我的所有数据都正确输入,并且能够单独查询每个表或特定数据集中的每个表,但不能查询项目中的每个数据集。

简单地说,我想一次查询我在 BigQuery 中的每一个表。 BigQuery 中的表由 Firebase Analytics 填充,并且可能会更改,恕不另行通知,添加或删除一个。

我知道您JOIN 查询中每个表的方法,但值是硬编码的。我需要一种可以提供通配符并自动查询每个表的方法。

任何帮助都会很棒,谢谢!

【问题讨论】:

【参考方案1】:

不幸的是,如果事先不知道数据集名称,您无法编写一个查询来查询所有数据集中的所有表。

但是,如果您可以以编程方式构造查询,则可以使用 BigQuery 的 datasets.list API 获取所有数据集名称,然后构造一个查询,使用上述表通配符获取这些数据集中的所有表。

【讨论】:

【参考方案2】:

您看过wildcard tables 上的文档吗?它给出的例子是:

#standardSQL
SELECT
  max,
  ROUND((max-32)*5/9,1) celsius,
  mo,
  da,
  year
FROM
  `bigquery-public-data.noaa_gsod.gsod19*`
WHERE
  max != 9999.9 # code for missing data
  AND _TABLE_SUFFIX BETWEEN '29'
  AND '40'
ORDER BY
  max DESC;

通配符表适用于表级别,但不是数据集级别,因此您仍然需要在所有数据集中的表之间执行联合,例如:

SELECT *
FROM (
  SELECT * FROM `first-dataset.*` UNION ALL
  SELECT * FROM `second-dataset.*` UNION ALL
  SELECT * FROM ...
);

【讨论】:

这就是问题所在。我知道通配符,但我需要一种方法来自动获取所有数据集并查询它们。我无法对单个数据集名称进行硬编码。【参考方案3】:

这是获取给定项目所有数据集的 SQL:

SELECT schema_name
FROM `projectnamehere`.INFORMATION_SCHEMA.SCHEMATA

【讨论】:

以上是关于在 bigquery 上查询项目中的所有数据集和表?的主要内容,如果未能解决你的问题,请参考以下文章

如何查询 BigQuery 视图和表的依赖关系?

BigQuery 数据集 ID 无效

创建将在不同环境中提取有关数据集和表大小的元数据信息的视图

如何获取有关 BigQuery 中正在使用/查询的视图和数据集的使用数据?

Google Bigquery 权限问题

从 bigquery 数据集和 pandas 下载大数据