Google Dataflowを使って、Google BigQueryからElasticに直接データをインジェストする
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からElasticsearchに簡単にデータをインジェストできることを実演するために、今回は人気のQ&Aフォーラム、Stack Overflowに公開されているデータセットを使用してみます。Dataflowバッチジョブを経由して数クリックでデータをインジェストし、その後Kibanaで検索や分析を始めることができます。
この例ではBigQueryデータセット、stackoverflow以下にあるstackoverflow_posts
という表を使用します。表には複数の構造化フィールドがpost body、title、comment_count
などの列形式で存在しており、これらをElasticsearchに取り込んでフリーテキスト検索やアグリゲーションを行います。
[Elasticsearch index
]に、データの読み込み先となるインデックス名を指定します。この例では[stack-posts
]インデックスを使用しています。 BigQuery内の表を読み込む際に使用する形式は、my-project:my-dataset.my-tableです。この例の場合は、bigquery-public-data:stackoverflow.stackoverflow_posts
となります。
[Run Job](ジョブを実行)をクリックするとバッチ処理が始まります。
数分以内に、Elasticsearchインデックスがデータを取り込む様子を確認できます。このデータを可視化するには、ドキュメントの手順に沿ってインデックスパターンを作成します。
これでKibanaの[Discover]から、データの検索をはじめることができます。