我是Apache Drill的新手。我需要查询我的PostgreSQL数据库 使用Apache Drill。 我经历了documentation并且可以 为我的Postgres数据库配置一个存储插件。
{
"type": "jdbc",
"driver": "org.postgresql.Driver",
"url": "jdbc:postgresql://localhost/mydb",
"username": <username>,
"password": <password>,
"enabled": true
}
我可以成功查询具有主数据类型但无法查询的表
具有复合数据类型的那些。
我尝试使用各种方式查询它,example。
这是我得到的例外:
Caused by: java.lang.NullPointerException: null
at
org.apache.calcite.sql2rel.RelStructuredTypeFlattener.restructureFields(RelStructuredTypeFlattener.java:201)
~[calcite-core-1.4.0-drill-r21.jar:1.4.0-drill-r21]
at
org.apache.calcite.sql2rel.RelStructuredTypeFlattener.restructure(RelStructuredTypeFlattener.java:225)
~[calcite-core-1.4.0-drill-r21.jar:1.4.0-drill-r21]
at
org.apache.calcite.sql2rel.RelStructuredTypeFlattener.restructureFields(RelStructuredTypeFlattener.java:205)
~[calcite-core-1.4.0-drill-r21.jar:1.4.0-drill-r21]
at
org.apache.calcite.sql2rel.RelStructuredTypeFlattener.rewrite(RelStructuredTypeFlattener.java:184)
~[calcite-core-1.4.0-drill-r21.jar:1.4.0-drill-r21]
at
org.apache.calcite.sql2rel.SqlToRelConverter.flattenTypes(SqlToRelConverter.java:435)
~[calcite-core-1.4.0-drill-r21.jar:1.4.0-drill-r21]
at
org.apache.drill.exec.planner.sql.SqlConverter.toRel(SqlConverter.java:270)
~[drill-java-exec-1.11.0.jar:1.11.0]
at
org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.convertToRel(DefaultSqlHandler.java:638)
~[drill-java-exec-1.11.0.jar:1.11.0]
at
org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.validateAndConvert(DefaultSqlHandler.java:196)
~[drill-java-exec-1.11.0.jar:1.11.0]
at
org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.getPlan(DefaultSqlHandler.java:165)
~[drill-java-exec-1.11.0.jar:1.11.0]
at
org.apache.drill.exec.planner.sql.DrillSqlWorker.getQueryPlan(DrillSqlWorker.java:131)
~[drill-java-exec-1.11.0.jar:1.11.0]
at
org.apache.drill.exec.planner.sql.DrillSqlWorker.getPlan(DrillSqlWorker.java:79)
~[drill-java-exec-1.11.0.jar:1.11.0]
at org.apache.drill.exec.work.foreman.Foreman.runSQL(Foreman.java:1050)
[drill-java-exec-1.11.0.jar:1.11.0]
at org.apache.drill.exec.work.foreman.Foreman.run(Foreman.java:280)
[drill-java-exec-1.11.0.jar:1.11.0]
在钻取中查询复合数据类型根本不可行吗? 如果我遗漏了什么,请告诉我。
由于
答案 0 :(得分:1)
Apache Drill v1.11数据类型文档:https://drill.apache.org/docs/supported-data-types/
在此版本的Drill中,您无法在查询中按名称引用复合类型,但Drill支持来自数据源的数组值。
修改强>
我建议在文档中尝试Apache Drill社区提供的方法。这有点来自复合类型:
部分例如,您可以使用索引语法查询数据并获取数组元素的值:
a[1]
您可以使用点表示法引用地图中某个键的值:
t.m.k
“Query Complex Data”部分显示了如何使用复合类型来访问嵌套数组。 “Handling Different Data Types”包括JSON映射和数组的示例。 Drill提供了处理数组和地图类型的函数: