【问题标题】:How can i insert(or modify) struct to ARRAY<STRUCT<STRING, STRUCT>> in BigQuery?如何在 BigQuery 中将结构插入(或修改)到 ARRAY<STRUCT<STRING, STRUCT>>?
【发布时间】: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。 (我觉得很长,不好回答)

【问题讨论】:

    标签: google-bigquery


    【解决方案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。错误消息是“参数类型的函数 ARRAY_CONCAT 没有匹配签名:ARRAY>>, ARRAY>. 支持的签名:ARRAY_CONCAT(ARRAY, [ARRAY, ...])"。我认为答案查询更复杂。谢谢!
    • 抱歉,已更新。如果有任何错误消息,请发布。
    • 成功了,你是我的英雄!杰龙。我可以问更多问题吗?我更新了,请注意我的问题 2。非常感谢!
    • 更新数组中的元素不太方便,因为它不是 BigQuery 的常见用例。如果您需要进行大量更新,请考虑改用 BigTable。但也许有人知道比 unnest-nest 更漂亮的方法。尝试提出一个新问题(很少有人会查看已回答的问题)。
    • 知道了,谢谢你的帮助!祝你有美好的一天:)
    猜你喜欢
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 2023-01-13
    • 2019-03-30
    • 2018-08-27
    • 2019-03-22
    • 2014-09-26
    相关资源
    最近更新 更多