我有一个bigquery表,其架构如图所示,其中field_b和field_c嵌套在field_a(数组)中
然后我有一个函数运行与特定值匹配的查询并尝试更新 field_a
查询:
UPDATE `{BQ_METADATA_TABLE_A}`
SET field_a = ARRAY(
SELECT STRUCT(
a.abc AS abc,
a.def AS def,
a.ghi AS ghi,
a.hik AS hik,
"@var_b" AS field_b,
field_c AS field_c
)
FROM UNNEST(field_a) a
)
WHERE EXISTS (
SELECT 1
FROM UNNEST(a)
WHERE ghi = "@some_value"
)
查询成功运行,匹配值“@some_value”并使用@var_b更新,问题是它正在更新field_c而不是field_b,即使我明确指出field_b要更新并且field_c保持其自己的值。 field_b 和 field_c 最初都是空值。
这里有什么问题吗?作为解决方法,我将两个字段设置为“@var_b”,例如 “@var_b”AS field_b, “@var_b”AS field_c
以便两者都得到更新。
至于C字段不更新,你可能想显式引用仍为UNNEST的
field\_c
中的field\_a
,你可以尝试如下更新:
来自
"@var\_b" AS field\_b,
field\_c AS field\_c
到
"@var\_b" AS field\_b,
a.field\_c AS field\_c