Apache Drill连接Neo4j后查询报错,求解决方案
问题
项目中使用Apache Drill连接Neo4j数据库并查询数据,已完成以下操作:
- 将
neo4j-driver-4.0.10放入第三方jar文件夹 - 创建名为
collisions的JDBC存储配置:
{ "type": "jdbc", "driver": "org.neo4j.jdbc.bolt.BoltDriver", "url": "jdbc:neo4j:bolt://localhost:7687", "username": "neo4j", "password": "neo4j", "authMode": "SHARED_USER", "writerBatchSize": 10000, "enabled": true }
执行查询语句select * from collisions.crashes limit 10;时触发错误,核心报错为:
java.lang.UnsupportedOperationException: Method getStatement in class org.neo4j.jdbc.Neo4jResultSet is not yet implemented.
完整错误信息:
Warning UserRemoteException : PLUGIN ERROR: Failed to load schema for schema collisions org.apache.drill.common.exceptions.UserRemoteException: PLUGIN ERROR: Failed to load schema for schema collisions java.lang.UnsupportedOperationException: Method getStatement in class org.neo4j.jdbc.Neo4jResultSet is not yet implemented. [Error Id: 108138ec-05d7-41af-b7c2-f954798256d8 ]
确认数据已成功加载到Neo4j,且可通过Neo4j Browser正常查询,需解决该报错。
解决方法
1. 更换Neo4j JDBC驱动版本
当前使用的neo4j-driver-4.0.10是纯Bolt驱动,未完整实现Apache Drill依赖的JDBC规范接口。建议替换为Neo4j JDBC Community驱动(包含完整JDBC接口实现),推荐使用neo4j-jdbc-driver-4.0.1或更高兼容版本,避免使用仅支持Bolt协议的轻量驱动包。
2. 调整存储配置参数
- 若使用完整JDBC驱动,将配置中的
driver字段改为:
同时可将JDBC URL切换为HTTP协议格式:"driver": "org.neo4j.jdbc.Neo4jDriver""url": "jdbc:neo4j:http://localhost:7474" - 若坚持使用Bolt协议,需确保驱动包包含
org.neo4j.jdbc.bolt.BoltDriver的完整实现,部分旧版本Bolt驱动未实现getStatement方法。
3. 禁用Drill元数据自动加载
Drill在查询前会自动加载数据源的schema,该操作触发了未实现的getStatement方法。可在存储配置中添加参数禁用元数据查询:
{ // 原有配置内容 "supportsMetadataQueries": false }
添加后Drill不会主动加载schema,可直接执行查询语句。
4. 使用Drill自定义查询语法绕过schema加载
直接调用Neo4j的Cypher语句执行查询,避免Drill触发未实现的JDBC方法,示例:
SELECT * FROM TABLE(collisions.query('MATCH (n:crashes) RETURN n LIMIT 10'))
内容的提问来源于stack exchange,提问作者JOSEPH Blessingh
相关产品推荐
相关产品推荐

