BigQuery含INSERT的MERGE语句报错:内部错误无法处理请求
问题根源与修复方案
嘿,我一眼就发现你SQL1里的问题了!问题出在WHEN NOT MATCHED THEN INSERT的字段匹配环节,具体有两个明显错误:
- 你指定要插入5个字段:
(ID, NAME, TOTAL, AVG_amt, CREATED_AT),但VALUES列表里只写了4个值,漏掉了SOURCE.AVG_amt这一项 - 你错误地写了
SOURCE.AVG,但在SOURCE的SELECT语句里根本没有AVG这个字段,应该是SOURCE.TOTAL才对
这两个字段不匹配的问题导致BigQuery在解析MERGE语句时出现异常,抛出了“内部错误”的提示;而SQL2因为去掉了INSERT部分,没有这个错误点,所以能正常执行。
修正后的完整MERGE语句
MERGE INTO testdataset.bq_pars_table TGT USING ( SELECT ID, NAME, TOTAL, AVG_amt, CREATED_AT FROM testdataset.bq_pars_table_copy_merge ) SOURCE ON (TGT.ID = SOURCE.ID ) WHEN MATCHED THEN UPDATE SET TGT.avg_amt = SOURCE.avg_amt WHEN NOT MATCHED THEN INSERT (ID, NAME, TOTAL, AVG_amt, CREATED_AT) VALUES ( SOURCE.ID, SOURCE.NAME, SOURCE.TOTAL, SOURCE.AVG_amt, SOURCE.CREATED_AT)
额外提醒
在写MERGE的INSERT子句时,一定要保证:
INSERT后的字段列表数量,和VALUES里的取值数量完全一致- 取值时引用的SOURCE字段,必须和USING子查询里的字段名完全匹配
这样就能避免这类解析错误啦!
内容的提问来源于stack exchange,提问作者Srinivas Rao
相关产品推荐
相关产品推荐

