在 bigquery 中更新结构列

Updating a struct column in bigquery

提问人:Saravana Kumar 提问时间:7/17/2023 最后编辑:Amira BedhiafiSaravana Kumar 更新时间:7/17/2023 访问量:49

问:

我有一个包含 1 个正常模式列和一个 struct(record, repeated) 列的表。 详细信息列包含嵌套在其中的 和 列。iddetailscountryname

详细信息列中有五条记录。

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 条记录。

我需要一个查询来更新结构字段,而不会弄乱其他记录。

SQL 结构 google-bigquery 嵌套

评论


答:

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 字段的值。