我希望使用针对 Hive 数据库的 @databricks/sql npm 包编写参数化查询。对于 Postgres,我会做类似的事情
client.query('SELECT * FROM employee WHERE id == $1', [123]).then(res => {
const data = res.rows;
});
使用 @databricks/sql npm 包,我能够使用提供的代码进行查询,如下所示
const queryString = `SELECT * FROM employee WHERE id = ${id}` // Bad
const queryOperation = await session.executeStatement(queryString, { runAsync: true });
await utils.waitUntilReady(
queryOperation,
false,
() => {}
);
await utils.fetchAll(
queryOperation
);
await queryOperation.close();
const result = utils.getResult(
queryOperation
).getValue();
我正在努力寻找有关如何传递参数而不是字符串文字的文档。
这个 python 小部件适合你吗?如果没有,那么我可以删除这个答案。
命令1:(定义变量)
%python
dbutils.widgets.text('score_date', '2021-01-01')
命令 2:(查询)
%sql
select whatever
from database.table_name
where months_between('$score_date', service_date) <= 12
根据驱动程序测试套件和 TypeScript 定义,您可以通过两种方式执行此操作。
第一个,带有命名参数:
const queryString = 'SELECT * FROM employee WHERE id = :myparam';
const queryOperation = await session.executeStatement(queryString, { runAsync: true, namedParameters: { myparam: 123 });
第二个,带有序数参数:
const queryString = 'SELECT * FROM employee WHERE id = ?';
const queryOperation = await session.executeStatement(queryString, { runAsync: true, ordinalParameters: [ 123 ]);
可以在此处找到这些类型的准备好的语句的测试文件: https://github.com/databricks/databricks-sql-nodejs/blob/3c29fe211663059a17b47b1f79ea3651c98a9cd7/tests/e2e/query_parameters.test.ts#L1