通过GAS将Google Sheet数据同步到BigQuery无报错但数据未写入求助
排查原因及修复方案
- 循环起始索引错误:你的
convertValuesToRows函数中循环从i=1开始遍历,而Utilities.parseCsv返回的数组索引从0开始对应你的第一行数据,直接跳过了第一行;如果你的查询范围A2:D5实际有效数据不足2行,循环会完全不执行,最终插入空的行列表自然不会有数据写入。
修复:把循环起始值改为i=0 - 循环变量名错误:你把
data.length(代表数据总行数)赋值给了numColumns变量,虽然不直接影响代码执行,但容易误导后续排查,建议修正为numRows。 - 无效的二次格式转换:你先把Sheet取到的二维数组
values转成CSV blob,又调用Utilities.parseCsv转成二维数组,属于完全多余的操作还会引入风险:如果单元格内容包含逗号、换行符等特殊字符,会导致CSV解析错乱,行结构不符合预期被BigQuery静默拒绝。
修复:直接把values传入convertValuesToRows,删掉所有CSV转换相关代码:// 删除以下冗余代码 // var rowsCSV = values.join("\n"); // var data = Utilities.newBlob(rowsCSV, 'application/octet-stream'); // 最终调用改为 bigqueryInsertData(values, tableId); - 字段类型不匹配:如果BigQuery表的字段类型和你传入的数据类型不一致(比如
QTY字段定义为整数,但是你Sheet里的内容是带小数的数字/文本),会被流式插入拒绝。你可以在代码的if (response.insertErrors)判断里增加console.log(JSON.stringify(response)),运行后查看Apps Script的执行日志确认是否有隐性错误。 - 流式插入延迟:BigQuery流式插入有最长15分钟的可见延迟,插入完成后不要立即查询,可以等待10-15分钟后再验证数据是否写入。
- 资源配置错误:核对三个配置项
projectId/datasetId/tableId是否正确,确认send工作表名的大小写和实际Sheet一致,A2:D5范围内确实有有效数据。 - 权限问题:确认当前运行脚本的Google账号对目标BigQuery表有
BigQuery Data Editor及以上权限,对Google Sheet有只读及以上权限。
内容的提问来源于stack exchange,提问作者Tu PHAN
相关产品推荐
相关产品推荐

