Elastic{ON}2017 レポートのまとめはこちら!!
こんにちは、nakaです!
Elastic{ON}も二日目!
さて、今日私から紹介するのは、
「Elasticsearch SQL」のセッション。
昨日のOpening Keynoteで話題となった
Elasticsearch SQLがどうやって作られているのか、
どのような機能をサポートするつもりなのかを紹介してくれました。
現在サポートする機能について
以下がElasticsearch SQLでサポートする機能です。
- SQL実行はReadのみサポート
- 単一のIndexおよびTypeへの実行が可能
最初のリリースにより、データ取得に関して、
基本的な機能が入ることになりますね。
後は特徴として
- 50%はElasticsearchの機能を使って、実現
- クエリ実行はElasticsearch内部で実施。
- 直接Elasticsearchクエリを実行するのでフットプリントがない
ということなので、SQL実行をするとしても、
強みである分散処理は最大限生かした構成となりますね。
SQLが実行可能な分散DBとなると、
かなり強力な機能と感じます。
Elasticsearch SQLの中身は?
今日のセッションでは、Costin氏より、
Elasticsearch SQLの中身がどのような作りになっていて、
どのような順番に、どのような処理が行われるかを、
最初から最後まで丁寧に説明してもらいました。
Elasticsearch SQLの中身の透明性を担保するため、
全てを隠さず紹介してくれたと感じました。
まさにOSS文化ですね。
パースの実行
パーサーでは、以下のようにクエリを分解し、
何が書かれているのかをプログラム側で理解しています。
アナリシスの実行
構文を理解した後は、クエリのチェックおよび、
テーブル名や列名など各種構文の値の解決を行います。
クエリの最適化によるプランニング
クエリの各種値が解決できた後は、プランニングで最適化を行います。
無駄な処理はまとめられます。
クエリの生成
最適化された構文をもとに、Elasticsearchクエリに変換します。
ここから先はElasticsearchにお任せですね。
クエリの実行
Elasticsearchのクエリとして実行します。
Streamで結果の取得が可能だったりと、必要な機能はサポートしています。
JOINについて
現在のところ、JOIN機能も入れる予定とのことでしたが、
JOINはElasticsearchの特性上、
単一インデックスへの対応です。
単一のインデックスでJOIN?
と思うかもしれませんが、ネストしたドキュメントに使うという発想ですね。
例えば、DBから値を移植する場合に、
データを格納したテーブルと、マスタ情報を格納したデータを紐づけ、
紐づいたまま一つのインデックスに入れれば、
JOIN相当の検索を実施することができます。
とはいえ、業務で使うことを考えると、
やはり、複数インデックスに対し、
JOINで結合したいという声が多いです。
この点、Costin氏としては将来、
どうする方針で考えているかが気になります。
明日AMAでもう一度聞こうと思います。
その他
また以下考えるべきポイントや、特徴を説明してもらいました。
analyzedとnot analyzedフィールドの違い
Elasticsearchには文字列フォーマットとして、
analyzed(text型)フィールドと、not analyzed(keyword型)フィールドがあります。
どちらのフォーマットかによって、
内部的に実行されるElasticsearchクエリが変わります。
例えば以下は、SQLで取得するカラムを絞った場合ですが、
analyzedフィールドは、_sourceフィールドに列名を入れ、絞ります。
not analyzedフィールドでは、必要な列名を列挙することで、列を絞ります。
DBにはnot analyzedという考え方がないため、
Elasticsearch SQLを使い場合は、注意ですね。
セッション後はパーティ
今日はセッションが終わった後、
Elastic{ON}のダンスパーティ!
会場はなんと、博物館を貸し切っていました。
このような会場は初めてです。
こんな感じでダンスしてました。
Post from RICOH THETA. - Spherical Image - RICOH THETA
最後に
明日はついにElastic{ON}最終日
最後まで走り切りたいと思います。
Elastic{ON}2017 レポートのまとめはこちら!!
Acroquest Technologyでは、キャリア採用を行っています。
- ビッグデータ(Hadoop/Spark、NoSQL)、データ分析(Elasticsearch、Python関連)、Web開発(SpringCloud/SpringBoot、AngularJS)といった最新のOSSを利用する開発プロジェクトに関わりたい。
- マイクロサービス、DevOpsなどの技術を使ったり、データ分析、機械学習などのスキルを活かしたい。
- 社会貢献性の高いプロジェクトや、顧客の価値を創造するようなプロジェクトで、提案からリリースまで携わりたい。
- 書籍・雑誌等の執筆や、対外的な勉強会の開催・参加を通した技術の発信、社内勉強会での技術情報共有により、エンジニアとして成長したい。
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。Elasticsearchを仕事で使いこみたいデータ分析エンジニア募集中! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com