如何列出用于在 BigQuery 中创建视图的所有表?

问题描述 投票:0回答:2

如何列出用于在 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 语句类似的结果

sql google-bigquery
2个回答
0
投票

你可以这样做:

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  

-1
投票

太棒了,给出的答案对我来说非常有用,尝试投票,但它说没有足够的声誉......不过非常感谢!

© www.soinside.com 2019 - 2024. All rights reserved.