在BigQuery中合并查询获取指定表元数据字段的方法咨询
解决方法
要拿到table_schema、table_name、creation_time和last_modified_time这四个字段,你可以通过关联多个INFORMATION_SCHEMA视图来实现——单个视图确实没法覆盖所有需求:
核心方案:关联TABLES和TABLE_STORAGE视图
INFORMATION_SCHEMA.TABLES能提供table_schema、table_name和表的creation_time,但缺last_modified_time;而INFORMATION_SCHEMA.TABLE_STORAGE正好包含表的last_modified_time,且可以通过table_schema和table_name与TABLES关联:
SELECT t.table_schema, t.table_name, t.creation_time, ts.last_modified_time FROM `region`.INFORMATION_SCHEMA.TABLES t INNER JOIN `region`.INFORMATION_SCHEMA.TABLE_STORAGE ts ON t.table_schema = ts.table_schema AND t.table_name = ts.table_name -- 可选:过滤掉视图,只保留物理表 WHERE t.table_type = 'BASE TABLE'
如果需要的是Schema的创建时间而非表的
如果你要的creation_time是Schema(即数据库)的创建时间,而非表的,那就再关联INFORMATION_SCHEMA.SCHEMATA视图:
SELECT s.schema_name AS table_schema, t.table_name, s.creation_time, ts.last_modified_time FROM `region`.INFORMATION_SCHEMA.SCHEMATA s INNER JOIN `region`.INFORMATION_SCHEMA.TABLES t ON s.schema_name = t.table_schema INNER JOIN `region`.INFORMATION_SCHEMA.TABLE_STORAGE ts ON t.table_schema = ts.table_schema AND t.table_name = ts.table_name WHERE t.table_type = 'BASE TABLE'
其他备选方式
如果SQL查询的方式受限,也可以用BigQuery的客户端SDK(比如Python、Java)调用元数据API,批量获取表的完整元数据——API返回的表对象会直接包含所有你需要的字段,不过这种方式需要写代码实现,适合批量处理的场景。
内容的提问来源于stack exchange,提问作者Fariya
相关产品推荐
相关产品推荐

