var dataArray = [[name,last,age], [name,last,age], …]
// Generates (?,?,?) if there are 3 cols per row
var row_bind = "(" + ",".join(Array(dataArray[0].length).fill("?")) + ")"
while (dataArray.length > 0) {
// Consume upto 100 rows at a time
var dataChunk = dataArray.splice(0, 100);
// Generate (?,?,?),(?,?,?),[...] upto a 100 times
var params = Array(dataChunk.length).fill(row_bind).join(",");
// Place the bind params into the query
var statement = "INSERT […] VALUES " + params;
// Prepare a statement with a flat stream of row/col data sent along
var stmt = snowflake.createStatement({
sqlText: statement,
binds: dataChunk.flat()
});
// Perform your 'stmt' logic, iterate over for the next batch...
}
1条答案
按热度按时间ivqmmu1c1#
您可以尝试将多个行批处理为一个单独的行
INSERT
声明。下面的javascript代码片段演示了一种方法,即通过在成片的行上生成一系列绑定参数来实现这一点。我还没有测试它运行,您可能需要作出调整时,适合它到您现有的程序。
注意:您正试图从常规sql执行的操作是不可能的吗?调用过程实际上是单线程的,如果您在sql查询可以更好地处理的数据集上进行迭代,则会缺乏性能。
通过snowflake的存储过程使用一种熟悉的命令式编程语言似乎很有吸引力,但它们不是为数据加载或数据转换而设计的,并且当以这种方式使用时,不能扩展到使用仓库大小。