我正在尝试删除嵌套在多个记录中的字段。在此问题之后,我尝试了以下操作(删除具有路径 abd 的列 d)但出现错误:Unrecognized name: b at [6:68]
WITH T AS (
SELECT * from unnest([struct(struct(struct(10 as c,'test' as d) as b,'field2' as field2) as a)])
)
select * replace ((select as struct a.* replace( (select as struct b.* except (d)) as b)) as a) from T;
Run Code Online (Sandbox Code Playgroud)
根据我在您的问题中的理解-您的原始行如下
STRUCT(STRUCT(STRUCT(10 AS c,'test' AS d) AS b,'field2' AS field2) AS a) original_struct
Run Code Online (Sandbox Code Playgroud)
你需要让它
STRUCT(STRUCT(STRUCT(10 AS c) AS b,'field2' AS field2) AS a) original_struct
Run Code Online (Sandbox Code Playgroud)
以下是为此完成的 BigQuery Standard SQL
#standardSQL
WITH t AS (
SELECT STRUCT(STRUCT(STRUCT(10 AS c,'test' AS d) AS b,'field2' AS field2) AS a) original_struct
)
SELECT
original_struct,
(
SELECT AS STRUCT (
SELECT AS STRUCT (
SELECT AS STRUCT * EXCEPT(d)
FROM UNNEST([original_struct.a.b]) b
) b,
original_struct.a.field2
) a
) new_struct
FROM t
Run Code Online (Sandbox Code Playgroud)
原始结构看起来像
Row original_struct.a.b.c original_struct.a.b.d original_struct.a.field2
1 10 test field2
Run Code Online (Sandbox Code Playgroud)
新结构是
Row new_struct.a.b.c new_struct.a.field2
1 10 field2
Run Code Online (Sandbox Code Playgroud)
因此,为了进一步将其应用于您的特定情况 - 请参见下面的示例
#standardSQL
WITH t AS (
SELECT 1 id, 2 x, 3 y, STRUCT(STRUCT(STRUCT(10 AS c,'test' AS d) AS b,'field2' AS field2) AS a) xyz, 4 v, 5 w
)
SELECT * REPLACE (
(
SELECT AS STRUCT (
SELECT AS STRUCT (
SELECT AS STRUCT * EXCEPT(d)
FROM UNNEST([xyz.a.b]) b
) b,
xyz.a.field2
) a
) AS xyz)
FROM t
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1618 次 |
| 最近记录: |