更新BigQuery带重复模式的嵌套记录字段失败求助
问题分析与解决
问题根源
你遇到的类型不匹配错误,本质是STRUCT字段名不匹配。目标表的nested_record_datatype_column_with_repeated_mode是带明确字段名的STRUCT数组(比如business_name、addr_line_1、addr_line_2等),但你原语句里的SELECT AS STRUCT只写了表达式,没有指定对应字段名,BigQuery会自动给这些表达式生成默认名称(比如空字符串对应的字段名是f0_、f1_这类匿名标识),导致生成的STRUCT结构和目标表定义不兼容,即使数据类型一致也会报错。
修复后的更新语句
必须在SELECT AS STRUCT中明确指定每个字段的名称,和目标表嵌套STRUCT的字段名、顺序完全对应:
UPDATE dataset_a.table_a AS n SET nested_record_datatype_column_with_repeated_mode = ARRAY( SELECT AS STRUCT col2 AS business_name, -- 对应目标STRUCT的business_name字段 '' AS addr_line_1, -- 对应addr_line_1 '' AS addr_line_2, -- 对应addr_line_2 '' AS addr_line_3, -- 对应目标STRUCT的第四个字段(根据实际名称调整) col5 AS contact_email, -- 对应目标STRUCT的第五个字段(根据实际名称调整) '' AS other_field -- 对应目标STRUCT的第六个字段(根据实际名称调整) FROM dataset_b.table_B tm WHERE tm.common_column_to_join = n.common_column_to_join ) WHERE EXISTS ( SELECT 1 FROM dataset_c.table_c AS dm WHERE n.common_column_to_join = dm.common_column_to_join )
验证建议
如果不确定目标表STRUCT的字段名和顺序,执行以下语句查看详细结构:
DESCRIBE TABLE dataset_a.table_a;
找到nested_record_datatype_column_with_repeated_mode的类型定义,确保SELECT AS STRUCT中的字段名、顺序、数据类型完全匹配。
内容的提问来源于stack exchange,提问作者Sanchit Moraskar
相关产品推荐
相关产品推荐

