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となります。

We're hiring

Work for a global, distributed team where finding someone like you is just a Zoom meeting away. Flexible work with impact? Development opportunities from the start?