嗨,我对雪花还很陌生,我正在尝试使用存储过程将2D数组插入雪花的表格中。
数组看起来像这样[[name,last,age],[name,last,age] ..] 有几千个项目。
我尝试通过循环使用INSERT INTO,但这花了很长时间。我需要一种更快的方法来插入数据。知道如何处理吗?
答案 0 :(得分:1)
您可以尝试将许多行一起批处理成single INSERT
statement。
以下javascript代码段说明了通过在binding parameters上生成的chunked number of rows序列来实现此目的的一种方法。我尚未对其运行进行测试,因此将其安装到现有过程中时可能需要进行调整。
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...
}
注意:使用常规SQL尝试做的事是不可能的吗?调用过程实际上是单线程的,如果您要遍历SQL查询可以更好地处理的数据集,则调用过程将缺乏性能。
通过Snowflake的存储过程使用一种熟悉的命令式编程语言似乎很有吸引力,但是它们并不是为数据加载或数据转换而设计的,并且不能通过这种方式扩展使用仓库的大小。