LoginSignup
2
4

More than 3 years have passed since last update.

[memo] BigQueryのScheduleとCloud FunctionsでGCSにテーブル情報を送信

Last updated at Posted at 2020-03-25

TODO

BigQueryにて設定したスケジュールが実行完了後にGCSにテーブル情報をCSVに変換してファイルを送信するようにする

  • Pub/SubをトリガーにしたCloud Functionsの送信処理の実装
  • BigQueryでスケジュールの設定

Pub/SubをトリガーにしたCloud Functionsの送信処理の実装

Pub/Subの設定

PUBSUB.png

  1. Cloud FunctionsのトリガーとなるTopic IDを入力

例: 「example-1」を設定

Cloud Functionsの設定

FUNK1.png

トリガーが発火した際に
GCSにBQのテーブルを参照して
CSVを送信するようにするスクリプトを配置

  1. トリガーは「Cloud Pub/Sub」で設定する 上記で、「example-1」を選択
  2. 言語は好みで、今回はPythonでインラインの実装

REQUIREMENTS.TXT では必要なモジュールなどを記載
MAIN.PY で実際に動作するものを記載

実装内容は「BQ上で昨日のテーブルの情報をGCSに送るようにする」といった内容

  • REQUIREMENTS.TXT
# pip でインストールされるもの
google-cloud-bigquery
  • MAIN.PY
from google.cloud import bigquery
from datetime import date, timedelta
def export_table(event, context):
    client = bigquery.Client()
    yesterday = date.today() - timedelta(days=1)
    project = "project_name"
    dataset_id = "data_set_name"
    table_id = "table_name_yyyymmdd_" + yesterday.strftime('%Y%m%d')
    destination_uri = "gs://{}/{}".format("dir_name", yesterday.strftime('%Y%m%d')+".csv")
    dataset_ref = client.dataset(dataset_id, project=project)
    table_ref = dataset_ref.table(table_id)
    extract_job = client.extract_table(
    table_ref,
    destination_uri,
    location="US",
    )
    extract_job.result()

最後に「export_table」を実行関数として入力

BigQueryでスケジュールの設定

BigQueryの機能の一つとして提供されている「スケジュール」があるので、利用する

BQ1.png

有効なクエリを記載し、そのスケジュールの新規作成から入る

BQ2.png

下の方にあるPub/Subの入力で「example-1」を設定することによって、
テーブルが生成されたタイミングでトリガーが発火するようになる。

以上で、BigQueryにて設定したスケジュールが実行完了後にGCSにテーブル情報をCSVに変換してファイルを送信するようになる

あとがき

Rundeckのオンプレのサーバをクラウドに移行した際に
サービスアカウントが切り替わっており、GSの実行権限が付与されてなかった。
内容自体は「BQ内で完結するテーブル生成」と「GCSにそのテーブルデータを送信」といった
結構小規模な機能の利用だったので、GCPで完結するようにした。

大した内容では無いので、ココで実装したメモを残します。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4