如何让Snowflake SQL查询返回表格形式结果集(非存储过程/UDF)
如何让Snowflake Node.js驱动返回表格形式的结果集
Snowflake Node.js驱动的rowMode仅提供object(默认,每行是键值对对象)和array(每行是值数组)两种选项,没有直接返回“表格形式”的配置,但可以通过获取结果元数据手动构造符合需求的表格结构。
解决方法
通过execute回调中的stmt对象获取列名元数据,再将列名与行数据组合成表格结构:
- 用
stmt.getColumnMetas()提取所有列的名称 - 将列名作为表格的标题行,与后续的行数据数组组合,或者封装成包含列名和数据的结构化对象
修改后的示例代码
await pool.use(async (clientConnection) => { return new Promise((resolve, reject) => { clientConnection.execute({ sqlText: `SELECT * FROM xyz WHERE USER_ID = ?`, // 修正原SQL语法错误(移除多余的TABLE关键字和右括号) binds: [userId], rowMode: 'array', complete: function(err, stmt, rows) { if (err) { console.error('Failed to execute statement due to the following error: ' + err.message); reject(err); // 补充Promise的reject逻辑,避免异步挂起 } else { console.log('Successfully executed get user statement: ' + rows.length); // 获取所有列的名称 const columnNames = stmt.getColumnMetas().map(col => col.name); // 构造表格形式:第一行是列标题,后续为每行数据数组 const tableResult = [columnNames, ...rows]; // 若需要结构化对象格式,可替换为: // const tableResult = { columns: columnNames, data: rows }; resolve(tableResult); // 传递构造好的表格结果 } } }); }); });
说明
getColumnMetas()返回列的元数据数组,每个元数据对象包含列名name、数据类型等信息,这里仅提取列名用于构造表格标题- 组合后的
tableResult是标准的二维数组表格结构,第一行对应列名,后续每行对应查询返回的一条数据;如果需要更易处理的结构化格式,可选择封装成包含columns和data属性的对象
内容的提问来源于stack exchange,提问作者Wanabe Super Coder
相关产品推荐
相关产品推荐

