我想做的应该是简单的:给定一个BigQuery架构,我想要选择除少数几个之外的所有表(包括嵌套的表).棘手的是BigQuery有一个嵌套结构,我要排除的几个嵌套在其他记录中.
我在BigQuery文档中找到了SELECT*except子句,看起来很有希望.问题是它似乎不支持嵌套结构排除.
例如,使用public github_nested数据集,我们可以编写类似的查询
#standardSQL
SELECT * except (payload) FROM `bigquery-public-data.samples.github_nested` LIMIT 1000
Run Code Online (Sandbox Code Playgroud)
通过从结果中删除有效负载记录,这可以成功实现我们的期望.现在让我们想象一下,我们只想删除payload.comment,从而保留响应中剩余的有效负载记录内容.我试过了
#standardSQL
SELECT * except (payload.comment) FROM `bigquery-public-data.samples.github_nested` LIMIT 1000
Run Code Online (Sandbox Code Playgroud)
但是,这失败了.
有人知道如何实现这一目标吗?
谢谢!
我想从公共BigQuery github_repos数据集中选择一切,除了两个记录:author.name 和 difference.old_mode.根据我提出的类似问题,我想我想运行类似的查询
#standardSQL
SELECT * REPLACE ((SELECT AS STRUCT author.* EXCEPT (name)) AS author),
REPLACE ((SELECT AS STRUCT difference.* EXCEPT (old_mode)) AS difference)
FROM `bigquery-public-data.github_repos.commits`
LIMIT 1000;
Run Code Online (Sandbox Code Playgroud)
如果我运行作者排除,它运作良好:
#standardSQL
SELECT * REPLACE ((SELECT AS STRUCT author.* EXCEPT (name)) AS author)
FROM `bigquery-public-data.github_repos.commits`
LIMIT 1000;
Run Code Online (Sandbox Code Playgroud)
但是,差异排除有一个错误:
#standardSQL
SELECT * REPLACE ((SELECT AS STRUCT difference.* EXCEPT (old_mode)) AS difference)
FROM `bigquery-public-data.github_repos.commits`
LIMIT 1000;
Run Code Online (Sandbox Code Playgroud)
错误:
Dot-star is not supported for type ARRAY<STRUCT<old_mode INT64, new_mode INT64, old_path STRING, ...>> at [2:41]
Run Code Online (Sandbox Code Playgroud)
谢谢. …