基于批处理脚本循环创建多客户端BigQuery外部表的执行异常问题求助
解决批处理循环中BigQuery外部表创建的变量解析问题
我来帮你搞定这个批处理脚本的问题,主要有两个关键错误导致变量无法正确解析,还有一个小的SQL语法问题需要修正:
问题1:变量i的定义存在空格陷阱
你原来写的SET i = 0会创建一个名为i (注意变量名末尾有空格)的变量,而不是你期望的i。这会导致后续if defined ClientName[%i%]判断的是不存在的ClientName[ ],循环逻辑直接出错。必须去掉等号两边的空格,改成:
SET i=0
问题2:数组变量的引用格式错误
在call命令的BigQuery字符串里,你用!ClientName[%%i]!的写法不对。因为启用了延迟扩展,同时call会触发一次额外的变量解析,正确的引用方式应该是!ClientName[!i!]!——延迟扩展会先解析!i!得到当前的索引值,再用这个值去取对应的客户端名称。
问题3:BigQuery OPTIONS语法缺失逗号
你的OPTIONS参数里,skip_leading_rows = 1后面少了一个逗号,这会导致BigQuery SQL语法报错,必须补上。
修正后的完整脚本
echo Give yearmonth "yyyyMM" setlocal enabledelayedexpansion SET /p yearmonth= SET ClientName[0]=abc SET ClientName[1]=def SET i=0 :myLoop if defined ClientName[%i%] ( call bq query --use_legacy_sql=false "CREATE EXTERNAL TABLE `test.!ClientName[!i!].%yearmonth%` OPTIONS (format = 'CSV', skip_leading_rows = 1, uris = ['gs://test/!ClientName[!i!]/AWS/%yearmonth%/Metrics/data/*.csv'])" set /a i+=1 GOTO :myLoop )
这个脚本现在可以正确遍历客户端数组,为每个客户端创建对应年月的BigQuery外部表了。
内容的提问来源于stack exchange,提问作者kakaji
相关产品推荐
相关产品推荐

