如何查找 BigQuery 中的跨视图是否使用特定列(当列未明确写入视图 DDL 中时)?

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

假设我在 BigQuery 中有一个表 dataset.table1,其中包含列 col1 和 col2。 我使用 DDL“select * from dataset.table1”创建视图 dataset.view1。

我可以使用 SQL 或 python 库,或任何其他方式(不使用数据沿袭或任何其他附加付费功能)来查找 dataset.table1 中的 col1col2 在 dataset.view1 中使用吗?

如果我使用 DDL 'select * from dataset.view1' 创建一个新视图 dataset.view2 会怎么样?是否可以追踪 dataset.table1 中的 col1col2 在 dataset.view2 中使用?

我知道如果 INFORMATION_SCHEMA 中明确说明了列(视图的 DDL 是从 dataset.table1 中选择 col1、col2),我可以找到视图中使用特定列的位置。 但我想知道如果没有明确说明,我是否可以找到视图中使用表列的位置。

google-bigquery information-schema
1个回答
0
投票

正如您所写,数据沿袭是实现此目的的正确工具。我不知道有任何其他工具可以执行此任务。

解决方法是从

INFORMATION_SCHEMA.VIEWS
获取所有视图查询。然后解析找到您的
dataset.table1
并将其替换为
(Select * except(col1) from your dataset.table1)
。将其作为试运行运行。如果失败,则该视图中需要 col1。

但是想想以下观点:

SELECT col2 FROM 
(
Select col1 || "add" as test_column, * 
FROM dataset.table1
)

显然这个视图只给出了

col2
,但是有涉及
col1
的计算,这些计算没有出现在最终输出中。 进行上述替换,干查询会失败,并导致视图查询中使用了
col1
的错误结论。

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