Google Dataflowを使って、Google BigQueryからElasticに直接データをインジェストする

blog-thumb-cloud-gcp.png

Elasticは本日、BigQueryからElastic Stackへのダイレクトなデータインジェストのサポートを開始したことを発表しました。データアナリストや開発者などのユーザーは、Google Cloud Consoleを数回クリックするだけでGoogle BigQueryのデータをElastic Stackにインジェストできるようになりました。Dataflowテンプレートを活用するこのネイティブな統合機能の登場で、ユーザーはデータパイプラインアーキテクチャーをシンプル化できるほか、エージェントのインストールや管理に伴う運用上の手間を回避することができます。

データウェアハウスソリューションとしてGoogle BigQueryを使用し、検索やダッシュボード可視化ソリューションにElastic Stackを使うというデータアナリストや開発者は少なくありません。GoogleとElasticはこの2つのソリューションのエクスペリエンスを強化する目的で協働し、BigQueryテーブルとビューからElastic Stackにデータをインジェストする、シンプルな手法の提供を実現させました。データシッパーやETL(Extract、Transform、Load)ツールをインストールする必要はなく、Google Cloud Consoleを数回クリックするだけでシンプルにインジェストを行うことが可能です。

本ブログ記事では、エージェントを経由せずにGoogle BigQueryからElastic Stackにデータをインジェストする方法をご紹介します。

BigQuery×Elasticのユースケースをシンプル化

BigQueryは人気のサーバーレスデータウェアハウスソリューションです。BigQueryを使って、カスタムアプリや各種データベースのほか、Marketo、NetSuite、Salesforce、Webクリックストリーム、果てはElasticsearchまで、異なるソースのデータを一元化できます。ユーザーはBigQueryで異なるソースのデータセットを結合し、SQLクエリをかけてデータを分析できます。BigQuery SQLジョブのアウトプットは一般的に、BigQueryで別のビューや表を作成するために活用されたり、また組織の関係者やチームと共有するダッシュボードの作成に活用されたりしています。いずれも、Elasticのネイティブなデータ可視化ツール、Kibanaで行うことができます。

BigQueryとElastic Stackを組み合わせるもう1つの重要なユースケースに、全文検索があります。すなわち、BigQueryからElasticsearchにデータをインジェストし、次に各種Elasticsearch APIやKibanaを使ってクエリをかけて検索結果を分析する、といった使い方も可能です。

データインジェストを最適化する

Google Dataflowは、Apache Beamをベースとするサーバーレス非同期メッセージングサービスです。 Google DataflowをLogstashに代えて使うと、Google Cloud Consoleからデータを直接インジェストすることができます。そこでGoogleとElasticのチームは、BigQueryからElastic Stackにデータをプッシュする、設定不要のDataflowテンプレートを共同開発しました。このテンプレートは、従来Logstashが担っていたデータ形式変換などのデータ処理をサーバーレスな手法で実行します。ユーザーはLogstashをこのテンプレートに置換するにあたり、既存のElasticsearchインジェストパイプラインに変更を加える必要はありません。

BigQueryとElastic Stackを併用するユーザーはこれまで、最初にGoogle Compute Engine仮想マシン(VM)上にLogstashのようなデータプロセッサー、あるいはカスタムソリューションを個別にインストールし、そのデータプロセッサーなどを使ってBigQueryからElastic Stackにデータを送信する必要がありました。しかしこの方法では、VMのプロビジョニングやデータプロセッサーのインストールに伴ってプロセスや管理の手間が生じます。現在はこの手順を省き、Dataflowのドロップダウンメニューを使ってBigQueryからElasticに直接データをインジェストすることができるようになりました。手間を減らす取り組みは多くのユーザーに役立ちますが、Google Cloud Consoleを数回クリックするだけでインジェストが完了するとなればなおさらです。

以下に、データインジェストのフローを示します。このインジェストフローは、Elastic CloudのElastic Stackから、Google Cloud MarketplaceのElastic Cloud、セルフマネージド環境まで、すべてのユーザーに共通です。

BigQuery Dataflow
 

使い始める

BigQueryからElasticsearchに簡単にデータをインジェストできることを実演するために、今回は人気のQ&Aフォーラム、Stack Overflowに公開されているデータセットを使用してみます。Dataflowバッチジョブを経由して数クリックでデータをインジェストし、その後Kibanaで検索や分析を始めることができます。

この例ではBigQueryデータセット、stackoverflow以下にあるstackoverflow_postsという表を使用します。表には複数の構造化フィールドがpost body、title、comment_countなどの列形式で存在しており、これらをElasticsearchに取り込んでフリーテキスト検索やアグリゲーションを行います。

Google Cloud Platform
 
テンプレートからDataflowジョブを作成します。Googleが提供するテンプレートの1つ、[BigQuery to Elasticsearch]テンプレートをドロップダウンメニューで選択します。
Google Cloud Platformクラウドステージング
 
ElasticsearchのCloud IDやBase64-encoded API Keyを含む、必要なパラメーターを入力します。Cloud IDは、下の画像に示すようにElastic Cloud UIで見つけることができます。API Keyは、Create API key APIを使って作成することができます。
デプロイのパラメーター
 

Elasticsearch index]に、データの読み込み先となるインデックス名を指定します。この例では[stack-posts]インデックスを使用しています。 BigQuery内の表を読み込む際に使用する形式は、my-project:my-dataset.my-tableです。この例の場合は、bigquery-public-data:stackoverflow.stackoverflow_postsとなります。

テンプレートからジョブを作成する
 

Run Job](ジョブを実行)をクリックするとバッチ処理が始まります。

数分以内に、Elasticsearchインデックスがデータを取り込む様子を確認できます。このデータを可視化するには、ドキュメントの手順に沿ってインデックスパターンを作成します。

インデックスパターンを作成する
 

これでKibanaの[Discover]から、データの検索をはじめることができます。

Kibanaの[Discover]
 
Kibana Lensを使って検索クエリ用にcomment_countの上位5つのバケットを可視化したり、フィルターやダッシュボードを作成したりしてみましょう。
Kibana Lens
 

まとめ

Elasticはユーザーが望む場所で、ユーザーが望むメソッドで、より簡単かつストレスフリーにプロダクトを実行できるよう開発を続けています。このGoogle Cloudとのスムーズな統合機能は、その最新の事例です。Elastic CloudはElastic Stackのバリューを拡張します。Elastic CloudはElasticのプラットフォームを活用する最適な方法であり、ユーザーはより多くのことを、より高速に実行できます。Google Cloud Marketplaceまたは、elastic.coにアクセスして、ElasticをGoogle Cloudで使い始めることができます。