2016-03-25 2 views
2

「select count(x)、y by y group」のようなクエリを実行すると、calciteはメモリ内のすべての計算を行います。だから十分なデータを持っているので、mem-of-memを実行することができます。他のストレージを使って集約を行う方法はありますか?スパークオプションがありますが、有効にするとnullptr例外が発生します。それは結果を計算するためにスパークを使用することを意味し、どのように動作しますか?方解石のメモリ内での集計を避ける方法

答えて

0

私はこれについて私の理解について少し話したいと思います。

第1に、カルサイトはSQL最適化を専門とするデータ操作エンジンです。そのため、主に最適な実行計画を見つけることに重点を置いています。

calciteにかなりのアダプタがあります。もちろん、集約をバックエンドにプッシュダウンして実行することもできます。集約をバックエンドにプッシュダウンするようにmysqlなど...

の場合はcsv adapterの場合、集計を実行するためにカルテットが実行詳細を生成すると思います。おそらくメモリにすべてを示唆したように、csvファイルが十分に大きければ、OOMが存在します。

はい、SPARKオプションがオンになっています。物理計画を実行するコードjavaの代わりに方解石がSPAKRコードを生成できるようになります。私はあなたが言及したOOMをある程度解決すると思います。

残念ながら、いくつかのテスト仕様以外にcalciteを実行するためにSPARKを使用する公式の紹介は見つかりませんでした。

CalciteAssert.that() 
     .with(CalciteAssert.Config.SPARK) 
     .query("select *\n" 
      + "from (values (1, 'a'), (2, 'b'))") 
     .returns("EXPR$0=1; EXPR$1=a\n" 
      + "EXPR$0=2; EXPR$1=b\n") 
     .explainContains("SparkToEnumerableConverter\n" 
      + " SparkValues(tuples=[[{ 1, 'a' }, { 2, 'b' }]])"); 
関連する問題