无法从GridDB容器检索数据,遇恢复类错误请求排查
问题分析与修正方案
你的代码存在多个关键错误,直接导致了Recovery相关错误及数据查询失败:
1. SQL查询的容器名称不匹配
你创建的容器实际名称是neoanalysis,但查询语句中写的是FROM mycontainer,GridDB无法定位到目标容器,触发错误。
2. JavaScript与Python语法混用
代码基于Node.js的griddb-node-api开发,却混入了Python语法:
- 使用Python风格的
#注释(JS需用//或/* */) - 调用Python的
print()函数(JS对应console.log()) - 用Python的缩进格式管理代码块(JS依赖大括号
{})
3. GridDB Node.js API方法名错误
Node.js版本的GridDB API采用驼峰命名法,你误用了Python API的下划线命名get_container,正确方法名为getContainer。
4. 未处理异步操作
GridDB的Node.js API几乎都是异步操作,直接同步调用fetch()无法正确获取结果,必须用async/await或回调处理异步逻辑。
修正后的代码示例
var griddb = require('griddb-node-api'); const createCsvWriter = require('csv-writer').createObjectCsvWriter; const csvWriter = createCsvWriter({ path: 'out.csv', header: [ {id: "id", title:"id"}, {id: "new_name", title:"new_name"}, {id: "est_diameter_min", title:"est_diameter_min"}, {id: "est_diameter_max", title:"est_diameter_max"}, {id: "relative_velocity", title:"relative_velocity"}, {id: "miss_distance", title:"miss_distance"}, {id: "orbiting_body" , title:"orbiting_body"}, {id: "sentry_object", title:"sentry_object"}, {id: "absolute_magnitude", title:"absolute_magnitude"} ] }); // 封装异步函数处理GridDB操作 async function queryGridDB() { const factory = griddb.StoreFactory.getInstance(); const store = factory.getStore({ "host": '239.0.0.1', "port": 31999, "clusterName": "defaultCluster", "username": "admin", "password": "admin" }); const conInfo = new griddb.ContainerInfo({ 'name': "neoanalysis", 'columnInfoList': [ ["name", griddb.Type.STRING], ["id", griddb.Type.INTEGER], ["new_name", griddb.Type.STRING], ["est_diameter_min", griddb.Type.DOUBLE], ["est_diameter_max", griddb.Type.DOUBLE], ["relative_velocity", griddb.Type.DOUBLE], ["miss_distance", griddb.Type.DOUBLE], ["absolute_magnitude", griddb.Type.DOUBLE] ], 'type': griddb.ContainerType.COLLECTION, 'rowKey': true }); try { // 用正确的异步方法获取容器 const container = await store.getContainer(conInfo); // 修正查询语句中的容器名称 const query = container.query("SELECT * FROM neoanalysis WHERE id = 54016465"); const resultSet = await query.fetch(); // 遍历结果集 while (resultSet.hasNext()) { const row = resultSet.next(); console.log(row); // 可选:将结果写入CSV await csvWriter.writeRecords([{ id: row[1], new_name: row[2], est_diameter_min: row[3], est_diameter_max: row[4], relative_velocity: row[5], miss_distance: row[6], absolute_magnitude: row[7] }]); } } catch (err) { console.error("Error:", err); } } // 执行异步查询函数 queryGridDB();
额外检查点
- 确认GridDB集群状态正常,容器
neoanalysis确实存在且包含目标数据 - 检查网络连通性:确保Node.js客户端能访问GridDB集群的239.0.0.1:31999组播端口
- 若容器为预先创建,需保证代码中
columnInfoList与实际容器的Schema完全匹配
内容的提问来源于stack exchange,提问作者Ismail Vohra
相关产品推荐
相关产品推荐

