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

如何在BigQuery存储过程中向ARRAY<STRING>列插入数据

修复BigQuery存储过程中数组参数拼接错误

错误核心原因:直接使用||运算符拼接字符串与数组类型,BigQuery仅支持同类型(字符串/字节/数组)间的拼接操作,跨类型拼接会触发签名不匹配错误。同时原代码的手动字符串拼接方式存在SQL注入风险,且未正确处理filename为NULL的场景。

修复后的存储过程代码:

CREATE OR REPLACE PROCEDURE `##.history`(Job_ID STRING, filename ARRAY<STRING>, Status STRING)
BEGIN
  EXECUTE IMMEDIATE FORMAT("""
    INSERT INTO `##.tablename` (JOB_ID, FILENAME, STATUS)
    VALUES ('%s', %t, '%s')
  """, Job_ID, filename, Status);
END;

关键说明:

  • %s:处理字符串类型参数,自动添加单引号并转义特殊字符,规避SQL注入风险。
  • %t:处理数组类型参数,自动将数组格式化为BigQuery可识别的数组字面量(如['f1.txt','f2.txt']);当filename为NULL时,会直接生成NULL值,无需额外处理。
  • 彻底移除手动字符串拼接逻辑,避免跨类型拼接的错误。

测试验证:
调用存储过程时,传递数组或NULL值均可正常执行:

-- 传递数组参数
CALL `###.history`('text1', ['f1.txt','f2.txt'], 'start');

-- 传递NULL参数
CALL `###.history`('text2', NULL, 'end');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:05:27