【问题标题】:Update values in struct arrays in BigQuery在 BigQuery 中更新结构数组中的值
【发布时间】:2020-08-08 01:27:43
【问题描述】:

我正在寻找一种简单的方法来使用 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)]

所以表格看起来像:

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

【问题讨论】:

  • 别担心,如果它有效,我总是接受。我只是“等待”,因为我要到星期一才能测试它。 :)

标签: sql arrays data-structures google-bigquery


【解决方案1】:

以下是 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 问题?
  • @MattWelke - 请发布您的问题以及所有相关详细信息、示例数据和预期结果 - 我/我们将很乐意提供帮助:o)
  • 你太棒了!我实际上被困在我把这个最小的例子放在一起以提出问题的步骤上。我最终创建了一个问题,以了解我为尝试创建问题而编写的代码存在什么问题。 >.> stackoverflow.com/questions/70428472/…
  • np。将尽快检查时间允许:o)
  • 感谢您的回答!现在,我可以完成我最初想问的问题了:stackoverflow.com/questions/70429214/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
  • 2021-12-22
  • 2021-05-05
  • 2016-03-07
  • 2019-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多