【发布时间】:2022-01-22 12:09:59
【问题描述】:
我认为这是Update values in struct arrays in BigQuery 中问题的更复杂版本。
我正在尝试更新结构中的一些字段,其中结构非常嵌套。我无法创建 SQL 来执行此操作。这是我的表架构:
CREATE TABLE `my_dataset.test_data_for_so`
(
date DATE,
hits ARRAY<STRUCT<search STRUCT<query STRING, other_column STRING>, metadata ARRAY<STRUCT<key STRING, value STRING>>>>
);
这是我创建表后 BigQuery GUI 中架构的样子:
这是我插入的数据:
INSERT INTO `my_dataset.test_data_for_so` (date, hits)
VALUES (
CAST('2021-01-01' AS date),
[
STRUCT(
STRUCT<query STRING, other_column STRING>('foo bar', 'foo bar'),
[
STRUCT<key STRING, value STRING>('foo bar', 'foo bar')
]
)
]
)
我的目标是转换“search.query”和“metadata.value”字段。例如,将它们大写,使行中的所有其他列(以及所有其他结构字段)保持不变。
我正在寻找一种解决方案,涉及手动指定 SQL 中的每一列,或者最好是我只能提及我想在 SQL 中转换的列/字段,而忽略所有其他列/字段。这是一个最小的例子。我在生产中处理的表有数百个列和字段。
例如,当以这种方式转换时,该行将从:
[
{
"date": "2021-01-01",
"hits": [
{
"search": {
"query": "foo bar",
"other_column": "foo bar"
},
"metadata": [
{
"key": "foo bar",
"value": "foo bar"
}
]
}
]
}
]
到:
[
{
"date": "2021-01-01",
"hits": [
{
"search": {
"query": "FOO BAR",
"other_column": "foo bar"
},
"metadata": [
{
"key": "foo bar",
"value": "FOO BAR"
}
]
}
]
}
]
【问题讨论】:
标签: sql google-bigquery