假设我在 BigQuery 中有一个表 dataset.table1,其中包含列 col1 和 col2。 我使用 DDL“select * from dataset.table1”创建视图 dataset.view1。
我可以使用 SQL 或 python 库,或任何其他方式(不使用数据沿袭或任何其他附加付费功能)来查找 dataset.table1 中的 col1 和 col2 在 dataset.view1 中使用吗?
如果我使用 DDL 'select * from dataset.view1' 创建一个新视图 dataset.view2 会怎么样?是否可以追踪 dataset.table1 中的 col1 和 col2 在 dataset.view2 中使用?
我知道如果 INFORMATION_SCHEMA 中明确说明了列(视图的 DDL 是从 dataset.table1 中选择 col1、col2),我可以找到视图中使用特定列的位置。 但我想知道如果没有明确说明,我是否可以找到视图中使用表列的位置。
正如您所写,数据沿袭是实现此目的的正确工具。我不知道有任何其他工具可以执行此任务。
解决方法是从
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
的错误结论。