如何在Google BigQuery中「展开」查询视图的SQL语句?
如何展开BigQuery视图为单条完整SQL
当然可以啦!这种把视图展开成原生SQL的操作其实很直接,尤其是像你这种单级依赖的视图,几步就能搞定。我们一步步来拆解:
步骤1:明确原视图和查询的内容
首先你的视图views.myview定义是:
SELECT Id AS Id, MAX(Time) AS MostRecentTime FROM [dataset.mytable] GROUP BY Id
而查询视图的语句是(这里我先修正你笔误的mview为view,因为前面给视图的别名是view):
SELECT * FROM [dataset.mytable] tbl JOIN [views.myview] view ON tbl.Time = view.MostRecentTime
步骤2:替换视图为子查询
只需要把查询语句里的[views.myview] view直接替换成视图的定义,并给这个子查询加上原来的别名view,就能得到展开后的完整SQL:
SELECT * FROM [dataset.mytable] tbl JOIN ( SELECT Id AS Id, MAX(Time) AS MostRecentTime FROM [dataset.mytable] GROUP BY Id ) view ON tbl.Time = view.MostRecentTime
额外注意事项
- 如果你的视图依赖了其他视图(多级嵌套),那就要递归地把每一层视图都替换成对应的子查询,直到所有依赖都展开成基础表为止。
- BigQuery现在更推荐使用反引号
`来包裹数据集、表或视图名(比如`views.myview`),替代原来的方括号语法,你可以根据习惯调整。 - 替换时要注意别名的一致性,确保子查询的别名和原视图的别名完全相同,避免JOIN条件或字段引用出错。
内容的提问来源于stack exchange,提问作者Alexander Mont
相关产品推荐
相关产品推荐

