如何在 BigQuery 中将结构插入(或修改)到 ARRAY<STRUCT<STRING, STRUCT>>?
Posted
技术标签:
【中文标题】如何在 BigQuery 中将结构插入(或修改)到 ARRAY<STRUCT<STRING, STRUCT>>?【英文标题】:How can i insert(or modify) struct to ARRAY<STRUCT<STRING, STRUCT>> in BigQuery? 【发布时间】:2021-02-16 11:28:42 【问题描述】:记录“event_params”是结构数组 而且values也是struct,event_params的结构类型是
ARRAY<STRUCT<STRING, STRUCT(string_value, int_value, float_value, double_value)>
我想将结构(或修改)添加到 BigQuery 表中的 ARRAY
问题 1
这是解决问题的表
这就是我想要的。
这些查询无效
ARRAY_CONCAT(event_params, [(new_data_key, new_input_data_value, null, null, nul)]
或
ARRAY_CONCAT(event_params, [(new_data_key, (new_input_data_value, null, null, nul))]
错误信息是
No matching signature for function ARRAY_CONCAT for argument types: ARRAY<STRUCT<key STRING, value STRUCT<string_value STRING, int_value INT64, float_value FLOAT64, ...>>>, ARRAY<STRUCT<STRING, STRING, INT64, ...>>. Supported signature: ARRAY_CONCAT(ARRAY, [ARRAY, ...])
谁能告诉我回答问题?
提前感谢您的回复。
问题 2(未解决)
是否可以更改 ARRAY
ex) [根据原文图 1] 更改 event_params.key 和 event_params.value.int_value
# value.string_value
k6(original) -> k7 (what i want just change k6 -> k6-1)
# value.int_value
1(original) -> 3 (what i want is original * 3)
我使用 UNNEST 行处理了这个问题,然后再次对它们进行 NEST。 (我觉得很长,不好回答)
【问题讨论】:
【参考方案1】:您必须更新整个数组字段。使用ARRAY_CONCAT:
update my_dataset.my_table
set event_params = ARRAY_CONCAT(
event_params,
[(new_data_key, (new_input_data_value, null, null, nul))]
)
明确指定类型会有所帮助:
update my_dataset.my_table
set event_params = ARRAY_CONCAT(
event_params,
ARRAY<STRUCT<key STRING, value STRUCT<string_value STRING, int_value INT64, float_value FLOAT64, double_value FLOAT64>>>[(new_data_key, (new_input_data_value, null, null, nul))]
)
【讨论】:
它没有用。因为列 (event_params.values.xxx) 是 STRUCT以上是关于如何在 BigQuery 中将结构插入(或修改)到 ARRAY<STRUCT<STRING, STRUCT>>?的主要内容,如果未能解决你的问题,请参考以下文章
使用云功能从云存储中将数据加载到BigQuery中(替代功能?)
如何在 node.js 环境中将查询语句传递给 bigquery