如何列出用于在 BigQuery 中创建视图的所有表? 例如,在 MSSQL/TSQL 中,您可以使用此代码列出它们。
select distinct schema_name(v.schema_id) as schema_name,
v.name as view_name,
schema_name(o.schema_id) as referenced_schema_name,
o.name as referenced_entity_name,
o.type_desc as entity_type
from sys.views v
join sys.sql_expression_dependencies d
on d.referencing_id = v.object_id
and d.referenced_id is not null
join sys.objects o
on o.object_id = d.referenced_id
where o.type_desc = 'USER_TABLE'
order by schema_name,
view_name;
-- 但是,我无法在 BigQuery 中重新创建此类代码。
我知道在 BigQuery 中,您可以使用 INFORMATION_SCHEMA.TABLES 或 INFORMATION_SCHEMA.VIEWS 获取视图的 DDL,但它们似乎都没有依赖项。
目前在 BigQuery 中我能想到的唯一方法是编写一个解析器来识别 FROM 和 JOIN 语句之后的第一个和第二个 ` 标记,并将它们放入表中,但这对于简单的任务来说似乎太复杂了。我想我会在这里问,希望有更好的方法来写这个。
分析了 BigQuery 上的信息架构表,尝试获得与我的 MSSQL/TSQL 语句类似的结果
你可以这样做:
select table_source, concat(table_catalog,".",table_schema,".",view_name)
as view_name,
from(
select table_catalog,
table_schema,
table_name as view_name,
view_definition as query,
ARRAY_CONCAT(
regexp_extract_all(view_definition, r"YOUR-PROJECT-1[.][a-zA-Z0-9_]+[.][a-zA-Z0-9_]+") ,
regexp_extract_all(view_definition, r"YOUR-PROJECT-2[.][a-zA-Z0-9_]+[.][a-zA-Z0-9_]+"),
regexp_extract_all(view_definition, r"YOUR-PROJECT-3[.][a-zA-Z0-9_]+[.][a-zA-Z0-9_]+")
)
as table_source,
FROM `region-YOUREGION.INFORMATION_SCHEMA.VIEWS`
) ,
UNNEST(table_source ) table_source
太棒了,给出的答案对我来说非常有用,尝试投票,但它说没有足够的声誉......不过非常感谢!