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

问题描述 投票:0回答:3

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

简单地说,我想立即查询 BigQuery 中的每个表。 BigQuery 中的表由 Firebase Analytics 填充,并且可能会在没有通知的情况下进行更改、添加或删除表。

我知道您

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

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

firebase google-bigquery firebase-analytics
3个回答
6
投票

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

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


3
投票

您看过通配符表的文档吗?它给出的例子是:

#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 ...
);

0
投票

您可以使用项目中的单个查询来查询所有数据集中的所有表。请注意,仅当所有表都位于单个region中时,它才有效。

DECLARE table_list ARRAY<STRING>;
DECLARE query_tables STRING;

-- loop through all datasets
FOR var_dataset IN (
  SELECT
    catalog_name,
    schema_name
  FROM
    `${project_id}`.`region-${region}`.INFORMATION_SCHEMA.SCHEMATA
)
DO

  -- get all raw tables in the dataset
  SET query_tables = FORMAT(
    """SELECT ARRAY_AGG(table_id), FROM `%s.%s`.__TABLES__;""",
    var_dataset.catalog_name, 
    var_dataset.schema_name
    );
  EXECUTE IMMEDIATE query_tables INTO table_list;

  -- loop through the tables inside of a dataset
  FOR var_table IN (
    WITH expression AS (
      SELECT table_list
    )
    SELECT table_id FROM expression, UNNEST(table_list) AS table_id
  )
  DO
    --- do whatever you want with each table
    SELECT var_dataset.catalog_name, var_dataset.schema_name, var_table.table_id;
  END FOR;
  
END FOR;

使用 FOR...IN 循环访问我的项目中的数据集。嵌套它与 另一个 FOR...IN 循环遍历表。

第一个循环内部使用EXECUTE IMMEDIATE从数据集中获取所有表。请注意,它只允许将 1 行保存到变量中,因此将所有返回的表添加到单行的 ARRAY_AGG 中。

然后可以使用WITH语句将单行转换为“table_expression”。 “table_expression”是 FOR...IN 可以循环的预期参数类型。

我用它来动态创建项目中所有表的快照。 尽管需要考虑的是这个循环可以有多少次迭代。我读过大约一百万,但似乎在官方文档中找不到这个数字。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.