如何在BigQuery存储过程中传递URI变量?解决LOAD DATA报错
解决BigQuery存储过程中LOAD DATA的URI错误
问题原因
你遇到的错误是因为BigQuery的LOAD DATA语句中,uris参数不支持直接使用变量构造数组(即[filename]这种写法),该语法会被识别为不支持的函数调用,导致无法设置uris参数。
解决方案
使用**动态SQL(EXECUTE IMMEDIATE)**来构建完整的LOAD DATA语句,将变量代入到URI数组中。修改后的代码如下:
begin declare filename STRING; declare SourceDir STRING; declare infilename STRING; declare load_sql STRING; set SourceDir='dir/'; set infilename='file.csv'; set filename = CONCAT('gs://mybucket/' , SourceDir, infilename); -- 动态拼接LOAD DATA语句 set load_sql = CONCAT( "LOAD DATA INTO `dataset.tablename` ", "FROM FILES(", "format='CSV',", "uris = ['", filename, "']", ");" ); -- 执行动态SQL EXECUTE IMMEDIATE load_sql; end
额外说明
- 如果需要加载多个文件,可以将多个URI拼接成数组格式,例如:
uris = ['gs://mybucket/dir/file1.csv', 'gs://mybucket/dir/file2.csv'],只需在拼接load_sql时处理好逗号和引号即可。 - 确保
filename变量生成的URI格式正确,避免出现多余的斜杠、缺失引号等语法问题。
内容的提问来源于stack exchange,提问作者Mudgal
相关产品推荐
相关产品推荐

