提问人:Saravana Kumar 提问时间:7/17/2023 最后编辑:Amira BedhiafiSaravana Kumar 更新时间:7/17/2023 访问量:49
在 bigquery 中更新结构列
Updating a struct column in bigquery
问:
我有一个包含 1 个正常模式列和一个 struct(record, repeated) 列的表。
详细信息列包含嵌套在其中的 和 列。id
details
country
name
详细信息列中有五条记录。
country name
UK sarah
IND carter
Itay marie
France john
peru christy
我正在使用以下查询来更新单个记录的值。
update
info_table
set value=array(
select as struct * replace('US' as country)) from unnest(details)
where name='sarah'
)
where id=100
这会成功将国家/地区值从英国更新为美国,但是,这确实会删除其余 4 条记录。
我需要一个查询来更新结构字段,而不会弄乱其他记录。
答:
1赞
Amira Bedhiafi
7/17/2023
#1
请尝试以下操作:
UPDATE info_table
SET details = (
SELECT ARRAY(
SELECT AS STRUCT
IF(name = 'sarah', 'US', country) AS country,
name
FROM UNNEST(details)
)
)
WHERE id = 100
评论
0赞
Saravana Kumar
7/17/2023
你能解释一下这部分到底是做什么的吗,选择数组(选择为结构体)。如果你不介意
1赞
Amira Bedhiafi
7/17/2023
未嵌套数组中的每个元素,此语句都会创建一个新结构。结构有两个字段:country:如果 name 字段等于 'sarah',则将值 'US' 分配给 country;否则,它将从原始数组元素中分配 country 字段的值。name:此字段仅从原始数组元素中获取 name 字段的值。
上一个:嵌套 SQL - 更快?
评论