記事のポイント
BigQueryリモート関数は、Cloud Functionsと連携し、SQLクエリ内で外部関数を呼び出せる。
HTTPエンドポイントを作成し、BigQueryからリクエスト送信、データ処理結果をレスポンスとして受信する。
オブジェクトテーブルで非構造化データを効率的に格納し、カスタム関数でデータ分析ニーズに対応する。
はじめに
BigQueryのリモート関数は、非構造化データ分析を効率化する強力なツールです。Cloud Functionsとの連携により、画像、テキスト、ログデータなど、多様な形式のデータを高度な分析処理できます。
本記事では、リモート関数の基本概念から、Cloud Functionsとの連携方法、非構造化データ分析の実践例、利用時の注意点までを網羅的に解説します。BigQueryリモート関数を活用して、データ分析を高度化し、ビジネスの意思決定を加速させるための知識とスキルを習得しましょう。
BigQueryリモート関数とは
BigQueryリモート関数は、SQLクエリ内で外部の関数を呼び出すことができる機能であり、Cloud Functionsとの連携により、データ処理の可能性を大きく広げます。
リモート関数の定義
BigQueryにおけるリモート関数は、BigQuery SQLの機能を拡張し、標準SQLでは対応できない処理を実現するための仕組みです。具体的には、Cloud FunctionsやCloud Runといった外部サービスで定義された関数を、BigQueryのクエリから直接呼び出すことを可能にします。
この外部関数呼び出しの仕組みにより、例えば、BigQueryが直接サポートしていないプログラミング言語(Python、Node.js、Goなど)で記述された複雑なデータ変換処理や、外部APIとの連携処理を、SQLクエリの一部として実行できます。
リモート関数は、CREATE FUNCTIONステートメントを使用して定義され、その際に、呼び出すCloud Functionsのエンドポイントや、データの形式などを指定します。これにより、BigQueryは指定されたエンドポイントに対してデータを送信し、処理結果を受け取ることができます。
この連携により、データ分析者は、SQLの表現力と外部サービスの処理能力を組み合わせ、より高度なデータ分析や加工処理をBigQuery内で行うことが可能になります。
例えば、テキストデータの感情分析、画像認識、地理空間データの処理など、標準SQLだけでは困難な処理も、リモート関数を利用することでBigQueryのクエリとして実行できます。BigQuery のリモート関数は、データウェアハウスの可能性を広げる重要な機能です。
Cloud Functions連携のメリット
Cloud Functionsと連携することで、BigQueryリモート関数はデータ処理において大きなメリットをもたらします。最も重要なのは、データ処理の柔軟性と効率化です。
Cloud Functionsを使用すると、JavaScriptだけでなく、Python、Go、Javaなどの多様な言語で関数を記述できます。これにより、SQLだけでは実現できない複雑なデータ変換や処理を、BigQueryのクエリ内で実行できるようになります。
例えば、非構造化データ分析への応用もその一つです。Cloud Functionsを利用して、JSON形式のデータから特定の情報を抽出したり、テキストデータに対して自然言語処理を適用したりすることが可能です。
また、外部APIとの連携も容易になります。Cloud Functionsから外部APIを呼び出し、その結果をBigQueryに取り込むことで、例えば、為替レートの取得や、地理情報の解析などを、データ分析のワークフローに組み込むことができます。
さらに、Cloud Functionsはサーバーレスアーキテクチャであるため、インフラの管理が不要であり、必要な時に必要な分だけリソースが割り当てられます。これにより、コスト効率の高いデータ処理が可能になります。Cloud Functions と BigQuery の連携は、データ分析の可能性を大きく広げます。
リモート関数の作成手順
リモート関数を作成する手順は、BigQuery Studio を使用する方法と、CREATE FUNCTIONステートメントを利用する方法の2種類があります。BigQuery Studioを使用すると、GUI上で関数の定義を簡単に行うことができます。
具体的には、BigQuery Studioの画面上で、関数の名前、データ型、Cloud Functionsのエンドポイントなどを指定し、リモート関数を定義します。
一方、CREATE FUNCTIONステートメントを利用する場合は、SQLクエリを用いて関数を定義します。この方法では、より詳細な設定が可能であり、例えば、関数の引数や戻り値のデータ型、関数の説明などを細かく指定できます。
CREATE FUNCTIONステートメントの基本的な構文は以下の通りです。
CREATE FUNCTION your_project.your_dataset.your_function(input_data STRING) RETURNS STRING LANGUAGE js AS "// JavaScript code here";
このステートメントでは、関数の名前(your_project.your_dataset.your_function)、引数(input_data STRING)、戻り値(RETURNS STRING)、使用する言語(LANGUAGE js)、そして関数の処理内容(JavaScript code here)を指定します。
リモート関数を作成する際には、Cloud Functionsのエンドポイントが正しく設定されていること、BigQueryからCloud Functionsへのアクセス権が付与されていることなどを確認する必要があります。リモート関数 の作成は、データ分析の可能性を広げる重要なステップです。
作成方法 特徴 BigQuery Studio GUI上で簡単に定義可能 CREATE FUNCTIONステートメント SQLクエリを使用し、 より詳細な設定が可能
Cloud Functionsの呼び出しとエンドポイント作成
BigQuery リモート関数を活用し、Cloud Functionsを呼び出してデータ処理を効率化する方法について解説します。HTTPエンドポイントの作成からBigQueryからのリクエスト送信、レスポンスの受信と活用まで、一連の流れを理解しましょう。
HTTPエンドポイントの作成
Cloud FunctionsまたはCloud Runを用いてHTTPエンドポイントを作成します。エンドポイントは、BigQueryからのHTTP POSTリクエストを受け付け、データ処理の結果をHTTPレスポンスとして返す役割を担います。
例えば、Cloud Runを使用する場合、コンテナイメージをデプロイすることで、スケーラブルなエンドポイントを構築できます。Pythonで関数を実装する例として、BigQuery DataFrames APIを利用する方法があります。このAPIを使うと、Python関数をCloud Functionsの関数としてデプロイし、リモート関数として利用できます。以下に、簡単な例を示します。
from google.cloud import bigquery
import pandas as pd
def process_data(request):
request_json = request.get_json(silent=True)
df = pd.DataFrame(request_json['data'](https://book.st-hakky.com/data-analysis/data-utilization-business))
# データの処理
processed_df = df.apply(lambda x: x*2)
return processed_df.to_dict(orient='records')
このコードは、BigQueryから送信されたデータを2倍にする簡単な処理を行います。重要なのは、リクエストからJSONデータを読み込み、Pandas DataFrameとして処理し、結果をJSON形式で返すことです。エラー処理や認証設定も忘れずに行いましょう。
BigQueryからのリクエスト送信
BigQueryからCloud Functionsのエンドポイントを呼び出すには、SQLクエリ内でリモート関数を使用します。まず、CREATE FUNCTION
文でリモート関数を定義し、エンドポイントのURLを指定します。
次に、SELECT
文でその関数を呼び出し、BigQueryのデータを引数として渡します。例えば、以下のように記述します。
CREATE OR REPLACE FUNCTION `your_project.your_dataset.your_function`(data STRING)
RETURNS STRING
REMOTE_RESOURCE = 'https://your-cloud-function-url';
SELECT `your_project.your_dataset.your_function`(column_name) FROM `your_project.your_dataset.your_table`;
この例では、your_project.your_dataset.your_function
という名前のリモート関数を作成し、https://your-cloud-function-url
にあるCloud Functionsのエンドポイントを呼び出しています。column_name
は、BigQueryテーブルの列名です。
BigQueryは、この列のデータをHTTPリクエストのBodyに含めてエンドポイントに送信します。Cloud Functions側では、このデータを受け取り、処理を行い、結果を返します。この方法により、BigQueryのSQL機能を拡張し、外部のデータ処理ロジックを組み込むことができます。
レスポンスの受信と活用
Cloud FunctionsからBigQueryへのレスポンスは、JSON形式で返されます。このJSONデータは、BigQueryのクエリ結果として利用できます。例えば、Cloud Functionsでデータの変換や加工を行い、その結果をBigQueryのテーブルに挿入したり、分析に利用したりできます。
レスポンスの構造は、Cloud Functionsで定義した形式に従います。BigQuery DataFrames APIを使用している場合、Pandas DataFrameをJSON形式に変換して返すのが一般的です。以下に、レスポンスの活用例を示します。
SELECT
original_data,
processed_data
FROM
`your_project.your_dataset.your_table`,
UNNEST(JSON_EXTRACT_ARRAY(your_remote_function(original_data))) AS processed_data;
このクエリでは、your_remote_function
から返されたJSON配列を展開し、processed_data
として利用しています。JSON_EXTRACT_ARRAY
関数は、JSON配列から要素を抽出するために使用されます。このようにして、リモート関数から取得したデータをBigQueryで分析し、可視化することができます。microCMSで管理されているデータをBigQueryに連携する例では、BigQueryリモート関数を利用してデータを取り寄せ、分析しています。
非構造化データ分析の実践
BigQueryで非構造化データを分析する際、オブジェクトテーブル の構造を理解し、カスタム関数を適切に作成・適用することが重要です。分析結果を可視化することで、データに基づいた意思決定を支援します。
オブジェクトテーブルの構造
BigQueryのオブジェクトテーブルは、非構造化データを効率的に格納し、分析するための特殊なテーブル形式です。このテーブルは、JSON形式のオブジェクトを格納するのに適しており、イメージデータやドキュメントデータなどを扱う際に特に有効です。
オブジェクトテーブルを使用することで、従来のテーブル構造では難しかった複雑なデータ構造を、BigQuery内で直接クエリできるようになります。テーブル定義では、データ型をJSON
として指定し、必要に応じてスキーマを定義します。
例えば、画像データを格納する場合、JSONオブジェクトには画像のURL、メタデータ、および関連情報を格納できます。これにより、BigQueryのSQLクエリを使用して、これらの非構造化データに対して直接分析を実行することが可能になります。
オブジェクトテーブルは、非構造化データを扱う上で柔軟性と効率性をもたらし、データ分析の可能性を広げます。適切なインデックス とパーティショニング を設定 することで、クエリのパフォーマンスをさらに向上させることができます。
カスタム関数の作成と適用
BigQueryでは、カスタム関数を作成し、特定のデータ分析ニーズに対応できます。カスタム関数は、標準のSQL 関数では実現できない複雑な処理や、特定のデータ形式に特化した分析を行う場合に特に役立ちます。
例えば、Cloud Functionsと連携して、外部APIを呼び出し、その結果をBigQueryのクエリ内で利用することができます。カスタム関数は、JavaScriptまたはSQLで記述でき、BigQueryのUIまたはコマンドラインツールを使用して登録します。
カスタム関数を適用するには、SQLクエリ内で関数名を呼び出し、必要なパラメータを渡します。これにより、データ変換、複雑な計算、または外部データの統合を、SQLクエリ内で直接実行できます。
また、BigQueryには多数のビルトイン関数が用意されており、これらを活用することで、一般的なデータ処理タスクを効率的に実行できます。カスタム関数 とビルトイン関数 を組み合わせる ことで、データ分析の柔軟性と効率性を大幅に向上させることが可能です。
分析結果の可視化
BigQueryでのデータ分析結果を最大限に活用するためには、可視化が不可欠です。BigQueryは、BI EngineやLooker などの様々な可視化ツールと連携し、インタラクティブなダッシュボードやレポートを作成できます。
BI Engineは、高速なインメモリ分析を提供し、大規模なデータセットに対するクエリのパフォーマンスを大幅に向上させます。Lookerを使用すると、データの探索、分析、および共有を簡単に行うことができ、組織全体でのデータに基づいた意思決定を支援します。
例えば、マーケティングデータを分析し、キャンペーンの効果を可視化したり、売上データを分析してトレンドを特定したりすることができます。可視化されたデータは、ビジネスの現状を把握し、将来の戦略を策定するための重要な情報源となります。適切な可視化ツール を選択し、データを効果的に表現 することで、より深い洞察 を得ることが可能です。
▶ データ活用支援について詳しく知る | 詳細はこちら
リモート関数利用時の注意点とリスク管理
BigQueryリモート関数を利用する際は、データ処理の制約、セキュリティ対策、エラーハンドリングに注意し、リスクを管理することが重要です。
データ処理の制約
BigQueryリモート関数を利用する際には、データサイズ、実行時間、同時実行数、HTTP呼び出しトライアウト回数に制約があることを理解しておく必要があります。
各行のすべての入力引数の合計サイズは最大5MBまで、HTTPレスポンスボディの最大サイズはCloud Run関数1世代の場合10MB、2世代またはCloud Runの場合15MBです。
各HTTP呼び出しはCloud Run関数1世代の場合最大9分間、2世代またはCloud Runの場合最大20分間です。
プロジェクトあたり同時に実行できるクエリは10件まで、各HTTP呼び出しに対して許可されているトライアウトは20回までです。
これらの制約を考慮し、データ量や処理の複雑さを管理することが重要です。特に、大きなデータセットを処理する場合には、データの分割や処理の最適化を検討する必要があります。
また、外部サービスのリソース制限も考慮に入れる必要があります。Cloud Functionsなどの外部サービスにも、それぞれリクエスト数や実行時間などの制限があるため、BigQueryリモート関数と連携する際には、これらの制限を超えないように注意が必要です。
例えば、Cloud Functionsの同時実行数制限を超えないように、BigQueryからのリクエスト数を調整するなどの対策を講じることが考えられます。
制約 Cloud Run関数1世代 Cloud Run関数2世代またはCloud Run HTTPレスポンスボディの最大サイズ 10MB 15MB 各HTTP呼び出し時間 最大9分間 最大20分間
セキュリティ対策
BigQueryリモート関数を利用する際には、データの安全性を確保するために、適切なセキュリティ対策を講じることが不可欠です。
BigQueryのデータはデフォルトで暗号化されていますが、必要に応じて独自の暗号化キーを使用することも可能です。これにより、クラウドストレージからのデータ漏洩リスクを軽減できます。
また、社内ネットワークやVPNのみに通信を許可することで、外部からの不正アクセスを防ぐことができます。
さらに、仮想デスクトップやMDM導入済みのPC端末にVPN接続を絞ることで、作業端末からのデータ持ち出し対策を講じることも有効です。
アクセス制御と認証も重要なセキュリティ対策の一つです。VPC Service Controlsやinternal trafficの設定を利用して、関数を呼び出す際に適切な認証を要求することができます。
例えば、特定のクレデンシャル情報を持つ場合にのみ関数が実行されるように設定することで、不正なアクセスを防止できます。
BigQueryで個人情報を扱う場合には、VPC-SCの導入を検討することを推奨します。GCPのプロジェクトオーナーでもVPC SCの設定は変更できないため、より強固なセキュリティを実現できます。
エラーハンドリング
BigQueryリモート関数を利用する際には、予期しないエラーが発生する可能性を考慮し、適切なエラーハンドリングを行うことが重要です。
リモート関数を使用する際に、UPDATE構文のSET句でのリモート関数の使用は避けることが推奨されます。
代わりに、事前にサブクエリまたは一時テーブルでリモート関数による処理を済ませておくことで、Cloud Run Functionsの起動を最小限に抑え、リソースを効率的に活用できます。
関数の実行結果やエラーが発生する際のログを適切に記録することも重要です。ログを監視することで、システムの挙動を把握しやすくなり、トラブルシューティングが容易になります。
エラー発生時には、リトライ処理を実装することも有効です。ただし、リトライ回数には制限があるため、無限ループに陥らないように注意が必要です。
例えば、最大リトライ回数を設定し、それを超えた場合はエラーを通知するなどの対策を講じることが考えられます。エラー発生時の対応策を事前に定義しておくことで、迅速な問題解決が可能になります。
BigQueryリモート関数の応用事例
BigQueryリモート関数は、リアルタイムデータ処理から機械学習モデルの統合まで、多岐にわたるデータ処理に適用可能です。これらの応用により、データ分析の効率が飛躍的に向上します。
リアルタイムデータ処理
BigQueryリモート関数は、リアルタイムデータ処理において強力なツールとなります。例えば、株価データや天気予報、ジオコーディング情報などをリアルタイムで取得し、BigQueryのデータセットに統合できます。
株価データの取得では、Yahoo FinanceなどのAPIをCloud FunctionsやCloud Runから呼び出し、最新の情報をBigQueryに取り込むことが可能です。同様に、OpenWeatherMapなどのAPIを利用して天気予報データを取得し、リアルタイムな気象情報をデータ分析に活用できます。ジオコーディング情報の取得では、OpenCage GeocoderやNominatimなどのAPIを用いて、大規模な地理情報データセットを構築できます。これらのAPIアクセスキーは、Cloud FunctionsやCloud Runに安全に登録し、リモート関数として利用します。
これらの応用により、常に最新の情報を基にしたデータ分析が可能となり、迅速な意思決定を支援します。特に、ストリーミングデータ分析やIoTデータの活用において、その真価を発揮します。例えば、IoTデバイスから送信されるセンサーデータをリアルタイムで分析し、異常検知や状態監視を行うことができます。
これにより、製造業における設備の故障予測や、スマートシティにおける交通状況の最適化など、幅広い分野での応用が期待されます。
機械学習モデルの統合
BigQueryリモート関数は、機械学習モデルとの統合においても重要な役割を果たします。BigQuery MLと連携することで、予測分析を高度化し、より精度の高い分析結果を得ることが可能です。
例えば、Google Cloud Data Loss Prevention(DLP)と統合して、データの暗号化と復号をリアルタイムで行うことができます。これにより、セキュリティを確保しながら、機械学習モデルを活用したデータ分析が可能になります。
また、大学教育機関での事例として、BigQuery内の文書データにNatural Language APIを適用し、文書の意味分析やテキスト分類などの自然言語処理機能を活用することが挙げられます。これにより、学生の学習効率が向上します。
さらに、BigQueryリモート関数を利用して、顧客の購買履歴データに基づいて将来の購買行動を予測するモデルを構築することも可能です。このモデルをBigQueryにデプロイし、リモート関数として呼び出すことで、リアルタイムな顧客分析を実現できます。
このように、BigQueryリモート関数は、機械学習モデルの活用範囲を広げ、データ分析の可能性を大きく広げます。
おわりに
BigQueryのリモート関数とCloud Functionsの連携は、データ分析の可能性を大きく広げます。多様な言語での関数記述、外部APIとの連携、サーバーレスアーキテクチャによるコスト効率など、多くのメリットがあります。
この記事を参考に、非構造化データの分析やデータ処理パイプラインの最適化に挑戦し、データ活用を推進していきましょう。Hakkyでは、お客様のデータ活用を支援する様々なソリューションをご用意しております。データ活用に関するお悩みやご要望がございましたら、ぜひお気軽にご相談ください。
お知らせ
BigQueryリモート関数で、データ活用を新たな次元へ。
標準SQLだけでは困難な処理も、自由自在に実現できます。
関連記事
参考文献