Spi*_*key 2 sql google-bigquery
我想从公共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)
谢谢.
更新 不是SQL服务器问题的副本.
作为一个自包含的示例,请考虑以下查询:
WITH T AS (
SELECT 10 AS a, ARRAY<STRUCT<x INT64, y STRING, z BOOL>>[
(1, 'foo', true)] AS arr UNION ALL
SELECT 11, ARRAY<STRUCT<x INT64, y STRING, z BOOL>>[
(2, 'bar', false), (3, 'baz', true)]
)
SELECT * FROM T;
Run Code Online (Sandbox Code Playgroud)
它返回一个列a类型INT64和列arr类型ARRAY<STRUCT<x INT64, y STRING, z BOOL>>.如果你想返回的修改arr在阵列内部的结构省略了y,你可以使用的组合SELECT * REPLACE和SELECT * EXCEPT:
WITH T AS (
SELECT 10 AS a, ARRAY<STRUCT<x INT64, y STRING, z BOOL>>[
(1, 'foo', true)] AS arr UNION ALL
SELECT 11, ARRAY<STRUCT<x INT64, y STRING, z BOOL>>[
(2, 'bar', false), (3, 'baz', true)]
)
SELECT * REPLACE(ARRAY(SELECT AS STRUCT * EXCEPT (y) FROM UNNEST(arr)) AS arr)
FROM T;
Run Code Online (Sandbox Code Playgroud)
我们的想法是用一个新数组替换原始数组,我们使用ARRAY子查询,SELECT AS STRUCT并使用* EXCEPT其字段不包含的struct元素重建数组y.
回到过去的问题查询,您可以将相同的想法difference和old_mode:
SELECT * REPLACE (
ARRAY(SELECT AS STRUCT * EXCEPT (old_mode) FROM UNNEST(difference)) AS difference
)
FROM `bigquery-public-data.github_repos.commits`
LIMIT 1000;
Run Code Online (Sandbox Code Playgroud)
查询结果包含一个difference数组,其结构不包含该old_mode字段.
| 归档时间: |
|
| 查看次数: |
2308 次 |
| 最近记录: |