2016-03-29 4 views
3

jdbc接続を使用せずにapache calcite api rawを使用したいと思います。私はちょうど良いjdbc APIを使用することができますが、APIを使用しようとするとnull ptrの例外を取得しています。jdbc apiを使用せずにクエリするApacheの方解母

package calcite.examples 

import java.util.Properties 

import calcite.demo.DemoSchema 
import org.apache.calcite.DataContext 
import org.apache.calcite.config.CalciteConnectionConfigImpl 
import org.apache.calcite.jdbc.CalcitePrepare.Query 
import org.apache.calcite.jdbc.{CalcitePrepare, CalciteSchema, JavaTypeFactoryImpl} 
import org.apache.calcite.prepare.CalcitePrepareImpl 

import scala.collection.JavaConverters._ 

object TryIt extends App 
{ 
    val ctx = new AdapterContext 
    val sql = Query.of[Any]("SELECT * FROM dep") 
    // assert(sql.rel != null) 

    val elementType = classOf[Array[Object]] 
    val prepared = new CalcitePrepareImpl().prepareSql(ctx, sql, elementType, -1) 
    val enumerable = prepared.enumerable(new MyDataContext) 
} 

class AdapterContext extends CalcitePrepare.Context 
{ 
    private val properties = new Properties 
    private val rootSchema = CalciteSchema.createRootSchema(true) 
    rootSchema.add("default", new DemoSchema) 

    // default schema names 
    override def getDefaultSchemaPath = List("default").asJava 

    override def spark() = { 
     val enable = config.spark 
     CalcitePrepare.Dummy.getSparkHandler(enable) 
    } 

    override val config = new CalciteConnectionConfigImpl(properties) 

    override val getTypeFactory = new JavaTypeFactoryImpl 

    override def getRootSchema = rootSchema 

    override def getDataContext = new MyDataContext 
} 

class MyDataContext extends DataContext 
{ 
    override def get(name: String) = { 
     println(s"MyDataContext name=$name") 
     null 
    } 

    override def getTypeFactory = ??? 

    override def getQueryProvider = ??? 

    override def getRootSchema = ??? 
} 

しかし、私はこれを実行すると、私はそれが文脈からv0stashed取得しようとすること

MyDataContext名= v0stashed

Exception in thread "main" java.lang.NullPointerException 
at org.apache.calcite.interpreter.Interpreter.<init>(Interpreter.java:71) 
at Baz.bind(Unknown Source) 
at org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:327) 
at calcite.examples.TryIt$.delayedEndpoint$calcite$examples$TryIt$1(TryIt.scala:26) 
at calcite.examples.TryIt$delayedInit$body.apply(TryIt.scala:18) 
at scala.Function0$class.apply$mcV$sp(Function0.scala:34) 
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12) 
at scala.App$$anonfun$main$1.apply(App.scala:76) 
at scala.App$$anonfun$main$1.apply(App.scala:76) 
at scala.collection.immutable.List.foreach(List.scala:381) 
at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35) 
at scala.App$class.main(App.scala:76) 
at calcite.examples.TryIt$.main(TryIt.scala:18) 
at calcite.examples.TryIt.main(TryIt.scala) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:497) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 

お知らせ、Iドンを得る:私はこれまでやったことはありますそれが何であるべきかを知っていない。私が見ている唯一のCalcitePrepare.Contextインプラントは、使用しないようにしようとしているCalciteConnectionを使用するものです。また、私は方解石の文書からコードの断片を取ったが、方解石と古くなった1.7

アイデア?

答えて

0

これはほとんどうまくいくはずですが、私はJdbcSchemaを使っていくつかのものを変更して同じことをしています。私はあなたがスパーク・スキーマを使用しようとしているのですが、Calciteのバージョン番号で判断すると、それは非常にうまく維持されているとは思いません。反射的なHRやJDBCスキーマのような、よりシンプルなスキーマを試してみてください。

関連する問題