在 Bigquery 中使用 where 条件更新嵌套记录
Posted
技术标签:
【中文标题】在 Bigquery 中使用 where 条件更新嵌套记录【英文标题】:Update nested record with where condition in Bigquery 【发布时间】:2020-07-27 13:23:25 【问题描述】:我有一个 bigquery 表“metrics”,其中包含嵌套记录字段其中一个字段称为 resource.labels,其键对值如下所示
我需要更新resource.labels,它是一个重复的记录字段,并且在这种情况下有一个键值对resource.labels.key和resource.labels.value
where key="machinetype" and value="N/A" set value="g1.small"
我试过了
update `metrics` set resource.labels.value=ARRAY(SELECT AS STRUCT * REPLACE("g1.small" as value) from UNNEST(resource.labels) as h where h.key="machinetype" and h.value="N/A") where resource.labels.key="machinetype" and resource.labels.value="N/A"
但是给出了这个错误:
Cannot access field key on a value with type ARRAY<STRUCT<key STRING, value STRING>> at [1:241]
谁能给点建议?谢谢。
【问题讨论】:
【参考方案1】:试试下面 - 应该可以工作
UPDATE `project.dataset.metrics`
SET resource = (
SELECT AS STRUCT * REPLACE(
ARRAY(
SELECT AS STRUCT key,
IF(key='machinetype' and value='N/A', 'g1.small', value) as value
FROM t.labels
) AS labels)
FROM UNNEST([resource]) t
)
WHERE true
【讨论】:
很好的答案,直到昨天我还在想如何只更新那些特定的行,但这个解决方案更好以上是关于在 Bigquery 中使用 where 条件更新嵌套记录的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery - 具有不同 WHERE 参数的嵌套查询?
Laravel 在使用 where 条件和更新时提供不同的结果