如何在BigQuery中获取所有表的表名及行数?
获取BigQuery表名及行数的方法
BigQuery的INFORMATION_SCHEMA确实没有直接的row_count字段,但可以通过以下几种方式获取表名和对应的行数:
方法1:使用项目级INFORMATION_SCHEMA.TABLE_STORAGE视图(推荐)
这个视图提供了项目内所有表的存储元数据,包含总行数字段,无需遍历每个数据集:
SELECT table_catalog AS project_id, table_schema AS dataset_id, table_name, total_rows AS row_count FROM `[你的项目ID].INFORMATION_SCHEMA.TABLE_STORAGE` WHERE table_type = 'BASE TABLE' -- 可选,过滤掉视图 ORDER BY row_count DESC;
注意:
total_rows包含表中所有行(包括时间旅行保留的已删除行),如果只需要当前活跃状态的行数,可使用方法2。
方法2:使用数据集级__TABLES__系统表
每个数据集都自带__TABLES__系统表,存储该数据集下所有表的实时元数据,其中row_count为当前活跃行数:
查询单个数据集
SELECT table_id AS table_name, row_count FROM `[你的项目ID].[数据集ID].__TABLES__` ORDER BY row_count DESC;
查询多个数据集
如果需要跨多个数据集查询,可通过UNION ALL合并各数据集的结果:
SELECT 'dataset_a' AS dataset_id, table_id AS table_name, row_count FROM `proj.dataset_a.__TABLES__` UNION ALL SELECT 'dataset_b' AS dataset_id, table_id AS table_name, row_count FROM `proj.dataset_b.__TABLES__` ORDER BY row_count DESC;
方法3:使用bq命令行工具
如果习惯用命令行操作,可结合bq工具和jq提取表名与行数:
单个数据集查询
bq show --format=prettyjson [项目ID]:[数据集ID] | jq '.tables[] | {table_name: .tableReference.tableId, row_count: .numRows}'
全项目查询
bq ls --format=prettyjson [项目ID]: | jq '.[] | {dataset_id: .id, tables: .tables[] | {table_name: .tableReference.tableId, row_count: .numRows}}'
内容的提问来源于stack exchange,提问作者Consuela
相关产品推荐
相关产品推荐

