通过Apache Drill

时间:2017-09-11 06:14:46

标签: java apache postgresql apache-drill

我是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]

在钻取中查询复合数据类型根本不可行吗? 如果我遗漏了什么,请告诉我。

由于

1 个答案:

答案 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提供了处理数组和地图类型的函数: