在BigQuery中更新结构数组中的值

4

我正在寻找一种简单的方法,在使用SQL时更新结构体数组中的值。假设我们有一个表:

CREATE TABLE schema.table
(
    date DATE,
    weights ARRAY<STRUCT<animal STRING, value FLOAT64>>
)
;

insert into schema.table
select cast('2020-01-01' as date), [('dog', 10.2), ('bird', 0.7), ('dragon', 3.2)]
union all
select cast('2020-01-02' as date), [('dog', 10.3), ('bird', 0.7)]
union all
select cast('2020-01-03' as date), [('dragon', 3.3)]

所以表格看起来像:

enter image description here

我希望以某种方式更新此表格,并将所有dragon名称更改为cat


不用担心,如果它能够正常工作,我总是会接受的。我只是“等待”,因为在周一之前我无法进行测试。 :) - matt525252
1个回答

5
以下是适用于 BigQuery 标准 SQL 的内容。
#standardSQL
UPDATE `project.dataset.table` t
SET weights =  
  ARRAY(
    SELECT AS STRUCT IF(animal = 'dragon', 'cat', animal) animal, value
    FROM t.weights 
  ) 
WHERE TRUE

你知道如何处理嵌套数组吗?例如,如果我的模式与 OP 的相同,除了 weights 中的每个记录都有一个名为 owners 的重复记录列(字符串),并且我的目标是对每个所有者进行一些转换。你认为这种查询是否值得在 Stack Overflow 上发表自己的问题? - Matt Welke
@MattWelke - 请发布您的问题,并提供所有相关细节、样本数据和期望结果 - 我们将很乐意帮助您 :o) - Mikhail Berlyant
你真厉害!我现在遇到了一个问题,就是在组合最小的示例以便提出问题的步骤上卡住了。最后我不得不创建一个问题来学习我编写的代码中存在的问题。>.> https://dev59.com/wG0NtIcB2Jgan1znM65u - Matt Welke
1
稍后我会尽快检查(np.),只要时间允许 :o) - Mikhail Berlyant
谢谢您的回答!现在,我能够完成我最初想要问的问题:https://dev59.com/hW0NtIcB2Jgan1znM6_c - Matt Welke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接