我在用着 (NodeJs Snowflake 驱动程序库 https://docs.snowflake.com/en/user-guide/nodejs-driver-use.html) - 雪花-sdk https://www.npmjs.com/package/snowflake-sdk并想问:
有没有一种方法以异步方式执行 Snowflake 语句,以便在启动繁重的过程后我可以使用 Snowflake 的 query_history() 调用来监视其状态?
看起来 Snowflake-connector-nodejs 不允许设置async
执行参数传入内部雪花 API 调用 https://docs.snowflake.com/en/developer-guide/sql-api/index.html关于语句执行...
一般来说,Snowflake REST API 允许执行 sql 语句async
模式使用async:true
(see here https://docs.snowflake.com/en/developer-guide/sql-api/reference.html#query-parameters) - 这是一个 url 参数,但在 NodeJs 雪花驱动程序库中不允许使用。
这是我的代码片段:
async executeStatement(params: ExecuteProcedureParams, connection: sf.Connection): Promise<ExecutionResult> {
const procedureCommand = `${params.sqlCommandText};`;
return new Promise((resolve, reject) => {
try {
connection.execute({
sqlText: procedureCommand,
binds: params.sqlCommandParams ?? undefined,
complete: (err: Error, stmt: sf.Statement, rows: any) => {
if (err) {
reject(err);
} else {
console.log('Number of rows produced: ' + rows?.length);
resolve({
requestId: stmt.getRequestId(),
executedSqlText: stmt.getSqlText(),
rows,
});
}
},
});
} catch (err) {
console.log(err);
}
});
}
我想executeStatement
如果我选择运行,对于繁重的语句是非阻塞的connection.execute({...});
in async
mode.
我相信这是我们应该能够设置异步参数的地方:
url: Url.format(
{
pathname: '/queries/v1/query-request',
search: QueryString.stringify(
{
requestId: statementContext.requestId,
async: statementContext.async // <--- NEW LINE THAT DOESN'T EXIST AT THE MOMENT
})
}),
源代码是here https://github.com/snowflakedb/snowflake-connector-nodejs/blob/master/lib/connection/statement.js#L1134
也许有人可以推荐一种方法来实现这种异步行为?