You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在BigQuery中向指定行的REPEATED RECORD字段插入多条记录

报错核心原因

ARRAY_CONCAT本身完全支持REPEATED类型(BigQuery中REPEATED字段本质就是数组),你遇到报错是因为待拼接的两个数组的STRUCT类型不匹配:

  • 表中arraything的元素是带明确字段名的STRUCT:STRUCT<quotekey STRING, policyvalue INT64, testbool BOOL, testtimestamp TIMESTAMP>
  • 你直接写的("a string", 6, true, NULL)生成的是匿名STRUCT,没有对应字段名,和表中定义的STRUCT不属于同一类型,因此函数匹配失败。
    同时你首次插入时arraything为NULL,直接对NULL执行ARRAY_CONCAT会返回NULL,需要先做NULL值处理。
实现方案

单次插入单个元素

写法如下,需显式指定STRUCT的字段名和表结构对齐,同时用IFNULL处理首次插入时字段为NULL的场景:

UPDATE `...tablename` 
SET arraything = ARRAY_CONCAT(
  IFNULL(arraything, []), 
  [STRUCT(
    "a string" AS quotekey, 
    6 AS policyvalue, 
    true AS testbool, 
    NULL AS testtimestamp
  )]
) 
WHERE thing = 'Moose';

单次插入多个元素

直接在数组中追加多个符合格式的STRUCT即可:

UPDATE `...tablename` 
SET arraything = ARRAY_CONCAT(
  IFNULL(arraything, []), 
  [
    STRUCT("a string" AS quotekey, 6 AS policyvalue, true AS testbool, NULL AS testtimestamp),
    STRUCT("another string" AS quotekey, 10 AS policyvalue, false AS testbool, TIMESTAMP("2024-01-01") AS testtimestamp)
  ]
) 
WHERE thing = 'Moose';
额外说明

不需要额外做全局类型转换,只要保证你新增的STRUCT每个字段的顺序、类型、名称和表中arraything的STRUCT定义完全一致即可正常拼接。

内容的提问来源于stack exchange,提问作者Dave Chambers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:09:05