You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在BigQuery中一次性查询项目下所有数据集的表大小?

查询BigQuery项目下所有表大小的正确姿势

嘿,我明白你遇到的问题了——原来的__TABLES__是单个数据集专属的元数据表,你直接写FROM __TABLES__的话,BigQuery不知道该从哪个数据集里读取,自然会报错。要一次性查整个项目的所有表大小,有两种靠谱的方法,我首推第一种更简洁的方案:

方法一:用项目级INFORMATION_SCHEMA视图(优先选择)

BigQuery提供了INFORMATION_SCHEMA.TABLE_STORAGE这个跨数据集的元数据视图,能直接返回你项目里所有表的存储信息,比遍历数据集高效得多。直接用下面的查询,记得替换成你的项目ID和区域:

SELECT
  table_catalog AS project_id,
  table_schema AS dataset_id,
  table_name AS table_id,
  TRUNC(total_bytes / POW(1024, 4), 2) AS size_tb, -- 用POW简化计算,和连续除以1024四次效果一致
  row_count
FROM
  `your-project-id.region-your-region.INFORMATION_SCHEMA.TABLE_STORAGE`
WHERE
  table_catalog = 'your-project-id' -- 可选,确保只查询当前项目的表
ORDER BY
  size_tb DESC;

小提示:

  • 把your-project-id换成你的实际项目ID,region-your-region换成你的BigQuery资源所在区域(比如region-us-central1或者region-europe-west3)
  • total_bytes包含了表的所有存储(分区、快照、历史版本都算),如果只想看当前活跃数据的大小,可以换成active_physical_bytes
  • 确保你有项目的bigquery.tables.list权限,不然可能无法查看某些数据集的元数据

方法二:遍历所有数据集(兼容旧场景)

如果因为某些原因没法用上面的视图,也可以用BigQuery的脚本功能遍历所有数据集,逐个查询每个数据集的__TABLES__表。这种方法稍微繁琐,但也能实现需求:

DECLARE dataset_list ARRAY<STRING>;
DECLARE current_dataset STRING;
DECLARE i INT64 DEFAULT 0;

-- 先获取项目下所有数据集的名称
SET dataset_list = (
  SELECT ARRAY_AGG(schema_name)
  FROM `your-project-id.region-your-region.INFORMATION_SCHEMA.SCHEMATA`
);

-- 创建临时表存储结果
CREATE TEMP TABLE project_table_sizes (
  dataset_id STRING,
  table_id STRING,
  size_tb FLOAT64
);

-- 循环遍历每个数据集查询表大小
WHILE i < ARRAY_LENGTH(dataset_list) DO
  SET current_dataset = dataset_list[i];
  INSERT INTO project_table_sizes
  SELECT
    current_dataset AS dataset_id,
    table_id,
    TRUNC(size_bytes / POW(1024, 4), 2) AS size_tb
  FROM
    `your-project-id.${current_dataset}.__TABLES__`;
  SET i = i + 1;
END WHILE;

-- 查看最终结果
SELECT * FROM project_table_sizes ORDER BY size_tb DESC;

总的来说,第一种方法是官方推荐的,语法简洁性能也更好,优先用它就对了!

内容的提问来源于stack exchange,提问作者Zusman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 17:08:16