Skip to main content

Posts

Trino parser introduction

Trinoのパーサー部分では ANTLR が使われています。 ファイルは以下のパスにあります。パーサー系で追加したり修正する場合はまず SqlBase.g4 を参照することになるかと思います。 以下はCTAS文の抜粋です。例えば、SELECT文でカッコをつけても正常にパースしたい構文を追加する例をまずはあげてみます。  CREATE TABLE (IF NOT EXISTS)? qualifiedName    (COMMENT string)?    (WITH tableProperties)? AS query    (WITH (NO)? DATA)?                                             #createTableAsSelect 修正例はこんな感じになります。右側のカッコはエスケープするためにクォートで囲んでいます。 なんとなくイメージがつくと思いますが、|はORの役割を果たしているのでqueryもしくは(query)をこれは表しています。  CREATE TABLE (IF NOT EXISTS)? qualifiedName    (COMMENT string)?    (WITH tableProperties)? AS (query | '('query')')    (WITH (NO)? DATA)?                                             #createTableAsSelect SqlBase.g4を修正したtrino-par...

Presto meetup #3

6/15に行われたPresto Meetup 第3回に参加してきました。実際に運用されている方々の話はやっぱり勉強になりますね。 Presto Update by @Lewuathe 0.152から0.178へのアップグレード時の変更点などの説明。 EXPLAIN (type VALIDATE)は他のDWH製品から移行を検討する時に使えそう。Lambda式は使い所があまり分かっていなかったけれど、複数カラムに対しては便利ということに納得しました。 Presto at Treasure Data by @taroleo 単に時間がかかるクエリが問題なのではなく、普段より遅いクエリが問題という問題設定方法がおぉーと思いました。PrestoのログをPrestoで分析してるのは再帰的な感じがして面白いですね。 Prestoベースのマネージドクエリサービス Amazon Athena by 志村 誠さん AWSユーザーが多かったのか、質問タイムが大盛況。Athenaについてはあまり調べてなかったのですが、これを機に今後はちょくちょくチェックしていきたいと思います。 Presto - 僕とヤフーと時々Teradata(仮) by @uokada 既存のシステムをPrestoに置き換えて97%高速化したお話。この夏、EmbulkのORCアウトプットが作成されるということで楽しみにしています。 DMMでのprestoおよび周辺エコシステムの運用事例 by @r_megane 主に日中に使われるアドホック用と夜間に使われるバッチ用にクラスタを分けていて、夜間帯はアドホック用のWorkerをバッチ用クラスタに追加するという使い方。ここらへん、わざわざクラスタを分けずに、ユーザーの設定や他DWHのスロットルみたいな感じでできたら便利そうな気がしますね。

Run Presto Product Test

Prestoには 特に設定せずに使えるテストに加えて、product-testというものが存在します。これは裏でDockerでHadoop, MySQL, PostgreSQL, Cassandra, SQL Serverを立ち上げておいて、そのDBに対してクエリを発行し、テストするものです。各コネクタ内のDBはドライバが提供しているEmbedded Serverを立ち上げられる機能等を利用しています。コネクタ内のDBバージョンとproduct-testのバージョンをあえて分けることで複数バージョンに対する保証にもなっています。例えばCassandraはコネクタ内のテストで使用しているバージョンは2.xでproduct-test内のバージョンは3.xとなっています。 それではMac上での最初の設定方法を書いていきます。シェル上で実行する方法もありますが、一番実行することの多そうなIntelliJ上でのテスト方法について書いていきます。MacとUbuntuとで多少異なる部分もありますが、基本的には同じ流れです。 シェルでの実行方法や最新の情報を見たい場合は こちら をご覧ください。 1 リポジトリ直下でビルド ./mvnw install -DskipTests 2 テスト対象のコンテナを起動 必要であれば全部起動させますが、1個だけでももちろん大丈夫です。 ※SQL Serverを使用する場合は事前にメモリを3.25GB以上をDockerに割り当てておく必要があります。起動する際も容量が空いてないと失敗します。 presto-product-tests/conf/docker/singlenode/compose.sh up -d hadoop-master presto-product-tests/conf/docker/singlenode/compose.sh up -d mysql presto-product-tests/conf/docker/singlenode/compose.sh up -d postgres presto-product-tests/conf/docker/singlenode/compose.sh up -d cassandra presto-product-tests/conf/docker/singl...

Setup Presto Dev Environment

半年ほど前から密かに Presto にコントリビュートしているんですが、メモも兼ねて自分が送ったPRや開発のTipsについて書いていきたいと思います。開発言語はJavaなのと、直すべきところも多々あるので比較的コントリビュートしやすいOSSな気がします。次に開発環境ですが、Windowsはサポートされていません。頑張れば出来るかもしれませんが、スタイルチェッカーで文字コード等々が弾かれエラーになります。俺はッWindowsを愛しているんだッ…!という方はこちらのIssueに対応しましょう Windows Support #2351 。約2年以上経過していますが、0/12という進捗率です…。僕は基本Macで時々VM内のUbuntu上で開発しています。後々詳しく書きますが、Dockerを使うテストがあるので、その時はやはりUbuntu上で動かすことが多いです。 準備としてIntellij IDEAとPrestoをローカルにクローン/ダウンロードしておきます。 最新のRequirmentsは こちら をご覧ください。 1 Terminalからリポジトリの直下でビルド 環境によっては数十分かかるかもしれないので気長に待ちましょう。 mvn clean install -DskipTests 2 IDEA上でプロジェクトをImport Intellij IDEAを起動し、Import Projectでリポジトリ直下のpom.xmlを選択します。そこから先は適当にNextを連打し、JDKの選択画面では1.8のパスを選択します。 3 IDEA上でPrestoサーバーを起動 プロジェクトのフォルダで以下のファイルまで移動し、右クリックでCreate ‘PrestoServer.main()’…とした後に、VM OptionsとWorking directoryを入力します。 presto-main/src/main/java/com/facebook/presto/server/PrestoServer.java VM Options: -ea -XX:+UseG1GC -XX:G1HeapRegionSize=32M -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -Xmx2G -Dcon...

Taiwan 2016

I went to Taiwan between September 6 and 9. Following photos are my favorite’s in Taiwan. A cute token used at MRT(Mass Rapid Transit) Crab xiaolongbao of ding tai fung. This is the most delicious food I ate in Taiwan. I also like a oyster omelette Shilin Night Market. It’s yummy. Famous place among Japanese as “Spirited Away (2001)” This is a shot at Martyrs’ Shrine. Changing of a guard is really cool, so I recommend every traveler watch it. These aren’t all of my favorite’s in Taiwan. It’s too many to show in this blog. Some friends say that “Taiwan isn’t clean, so I don’t wanna go to there”. I think so, but it’s worth going. Especially, Japanese should go there to realize the historical background. If you go to Taiwan, I recommend you go with someone. The reason is because you can eat a variety of xiaolongbao a lot!