Prestoソースコードリーディング
これはおもしろいな。イカス。lightweight dependency injection framework for Java https://t.co/k8YWaGzO6U
2013-11-15 20:40:45JDBI is a SQL convenience library for Java. It attempts to expose relational database access in idiomatic in Java http://t.co/PZl2AjCgwW
2013-11-15 20:54:08JDBIは便利そうだけど見た目が黒魔術になるな。Handle.createQuery だけが欲しいけど、それにしては牛刀感がある。最近自作しちゃったし…
2013-11-15 20:58:48Prestoが使っているJDBIではcreate tableまでJDBIでやっているけど、そこは某Plazmaの実装で使ったActiveRecordを組み合わせる方がイケていると思った。これスキーマのmigrationが必要になったらどうするんだろうな。
2013-11-15 21:05:36Javaのコードに突然ActiveRecordのmigration scriptが混ざるのがキモいのは認める。
2013-11-15 21:06:04実行計画のモデルを発見。PlanNodeRewriterはオプティマイザのプラグインを想定しているのかな。 https://t.co/UWqYgUXCdN
2013-11-15 21:09:39その通りだった。オプティマイザはPlanNodeRewriterを実装する。これならpush downの実装は簡単そう。 https://t.co/EqJ0JieRF5
2013-11-15 21:10:59コレだいぶがんばったな…最初は何でoptiqとか既存のSQLの実装を使わないのかと思ったけども、ここまで自前で実装したなら逆に良い気がした。
2013-11-15 21:13:18かの@muga_nishizawaさんが好きそうなコードが出てきた。実行プランを受け取ってJavaバイトコードを生成するコードジェネレータを通してから実際に実行するらしい。
2013-11-15 21:14:55さすがにJavaバイトコードジェネレータを自前で実装する必要は無かったと思うけど…まぁ作ったのなら良いのでは無かろうか。https://t.co/657piRnW9f
2013-11-15 21:15:54たまに出てくるio.airlift.slice.Sliceなるクラスが謎だったので調べてみると、怪しげな物が出てきた。Slice自体はバイト列を表現する。ライブラリ全体はdirect bufferの管理機構であるらしい。 https://t.co/XwCq17zo3I
2013-11-15 21:19:37ネイティブでサポートしている型システムは、boolean, long, double, Slice=バイト列 の4種類であるらしい。少ない気がするけど、型システムも拡張できるのかな。 https://t.co/IPty6L6afb https://t.co/4jmmXU7rGP
2013-11-15 21:21:44TypeInfoは普通のenumだから拡張は意図していなさそうだな。そのうち誰かがTimestamp型を入れろと言うに違いない。そしてタイムゾーンが、精度が…となるまではテンプレか。まぁ精度はMySQLやPostgreSQLに従ってマイクロ秒あたりが妥当なのかな。
2013-11-15 21:26:44インタフェース的にRecordCursorかTupleReaderを実装すればストレージ層やファイルフォーマットは置き換えられそうだけど、実例が見たいな。RCFileやSequenceFile用の実装を探しているけど見当たらない。
2013-11-15 21:34:56TupleReaderやRecordCursorを実装しているクラスが一つも入っていないな…Facebook内部用リポジトリにしか無いと言うことか。しかし裏を返せば外部のjarからプラグイン可能なハズで、それは便利だな。ソースを書き換えなくていい。
2013-11-15 21:37:19ぃゃそんなハズは無い気がするな。そしたら今のコードベースでは単品でデータを読めないことになり、誰も試せない状態でOSS化したとは考えにくいな。もうちょっと探してみる
2013-11-15 21:40:26やっぱり見つからない。一時テーブル用に内部で使われているBlockCursorはあるけども、他には何もない。Presto-HiveのテストためのCREATE TABLE文を発見したけども、STORED AS RCFILEとある。一方でRCFileから実際に読み出すテストはない。
2013-11-15 21:55:06