如何在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
相关产品推荐
相关产品推荐

