Cloud FunctionsでBigQueryを操作する

GCP

GCPのCloudFunctionsでBigQueryを持ちいたジョブを作成する際に、悩んでしまったのでやり方を整理。またProject間をまたいで(他所のリソース)を参照する方法を整理

前提条件

  • 権限編集の可能なサービスアカウントでの実行
  • Cloud Functionsでの実行

bigframesを用いた実行

おそらくこれが一番楽だと思います。bigframesはgoogleが提供しているPythonライブラリでbigframes.pandasを用いるとDataFrame形式で操作することが可能です。
参考: https://cloud.google.com/bigquery/docs/bigquery-dataframes?hl=ja

使い方:インストール

##※cloud functionsで実行する場合はrequirements.txtに記載する
pip install bigframes

使い方:実際のコード例

import bigframes.pandas as bpd

##BigQueryのプロジェクトを指定します。
bpd.options.bigquery.project = "参照したいプロジェクト"

##クエリを文字列で入力します。
query ="""
SELECT 'hello world'
"""

##クエリを実行します。
bpd_df = bpd.read_gbq(query)

ここで生成されるbpd_dfはDataFrameライクなオブジェクトであり、PandasのDataFrameとは異なります。基本的にな機能はほぼ変わらないですが、bpd_dfの場合BigQueryのリソースを用いて実行されます。

もし、BigQueryのリソースを利用したくない場合は以下で通常のDataFrameへ変換が可能であり、通常のDataFrameである場合、実行マシン上のリソースが使われます。

pd_df = bpd_df.to_pandas()

権限周り

Cloud Functionsで実行する際、以下の権限が必要です。

①BigQueryのジョブユーザ権限
BigQueryのリソースを参照する際に必要な権限です。参照したいProjectに紐づく権限が必要なので、参照するProjectが異なる場合はProjectの管理者に権限付与を行う必要があります。

②Cloud Run 起動元
Cloud Functionsを単体で起動する際は不要なケースがありますが、httpsトリガーや、Workflowsといいった別のPFを経由する場合、実行に必要な権限です。

まとめ

Cloud FunctionsでBigQueryを操作するさいは、bigframesを利用する。
その際に権限周りの追加も必要。

コメント

タイトルとURLをコピーしました