如何在BigQuery中查询指定视图的所有依赖视图与存储过程?
在BigQuery中追踪视图的依赖对象
BigQuery通过INFORMATION_SCHEMA提供了内置元数据表,可直接用于查询指定视图的依赖对象(包括视图和存储过程)。核心用到以下两张表:
1. 追踪依赖视图
使用VIEW_DEPENDENCIES表,该表记录了视图对其他表、视图的依赖关系。要找出所有直接引用指定视图的视图,可执行以下查询:
SELECT referencing_view_name AS dependent_object_name, 'VIEW' AS object_type FROM `[你的项目ID].[你的数据集ID].INFORMATION_SCHEMA.VIEW_DEPENDENCIES` WHERE referenced_table_name = 'View_A' -- 替换为目标视图名称 AND referenced_dataset_id = '[你的数据集ID]' AND referenced_project_id = '[你的项目ID]'
2. 追踪依赖存储过程
使用ROUTINE_DEPENDENCIES表,该表记录了存储过程、函数对其他对象的依赖。要找出直接引用指定视图的存储过程,可执行:
SELECT referencing_routine_name AS dependent_object_name, 'STORED PROCEDURE' AS object_type FROM `[你的项目ID].[你的数据集ID].INFORMATION_SCHEMA.ROUTINE_DEPENDENCIES` WHERE referenced_table_name = 'View_A' -- 替换为目标视图名称 AND referenced_dataset_id = '[你的数据集ID]' AND referenced_project_id = '[你的项目ID]' AND referencing_routine_type = 'PROCEDURE' -- 仅筛选存储过程,排除函数
3. 查询全层级递归依赖
如果需要找出所有间接依赖(比如引用了依赖目标视图的视图/存储过程),可以用递归CTE实现:
递归查询所有依赖视图
WITH RECURSIVE recursive_view_deps AS ( -- 初始直接依赖 SELECT referencing_view_name AS dependent_view, 1 AS dependency_level FROM `[你的项目ID].[你的数据集ID].INFORMATION_SCHEMA.VIEW_DEPENDENCIES` WHERE referenced_table_name = 'View_A' AND referenced_dataset_id = '[你的数据集ID]' AND referenced_project_id = '[你的项目ID]' UNION ALL -- 递归查找间接依赖 SELECT vd.referencing_view_name, rvd.dependency_level + 1 FROM `[你的项目ID].[你的数据集ID].INFORMATION_SCHEMA.VIEW_DEPENDENCIES` vd JOIN recursive_view_deps rvd ON vd.referenced_table_name = rvd.dependent_view AND vd.referenced_dataset_id = '[你的数据集ID]' AND vd.referenced_project_id = '[你的项目ID]' ) SELECT dependent_view AS dependent_object_name, 'VIEW' AS object_type, dependency_level FROM recursive_view_deps ORDER BY dependency_level;
注意事项
- 务必替换查询中的
[你的项目ID]、[你的数据集ID]和View_A为实际值 - 上述查询默认仅覆盖当前数据集内的依赖,若需跨数据集/项目查询,需调整过滤条件或使用跨数据集查询语法
- 存储过程的递归依赖查询逻辑类似,可基于
ROUTINE_DEPENDENCIES修改递归CTE实现
内容的提问来源于stack exchange,提问作者Mohammad
相关产品推荐
相关产品推荐

