[memo] BigQueryのScheduleとCloud FunctionsでGCSにテーブル情報を送信
TODO
BigQueryにて設定したスケジュールが実行完了後にGCSにテーブル情報をCSVに変換してファイルを送信するようにする
- Pub/SubをトリガーにしたCloud Functionsの送信処理の実装
- BigQueryでスケジュールの設定
Pub/SubをトリガーにしたCloud Functionsの送信処理の実装
Pub/Subの設定
- Cloud FunctionsのトリガーとなるTopic IDを入力
例: 「example-1」を設定
Cloud Functionsの設定
トリガーが発火した際に
GCSにBQのテーブルを参照して
CSVを送信するようにするスクリプトを配置
- トリガーは「Cloud Pub/Sub」で設定する 上記で、「example-1」を選択
- 言語は好みで、今回は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の機能の一つとして提供されている「スケジュール」があるので、利用する
有効なクエリを記載し、そのスケジュールの新規作成から入る
下の方にあるPub/Subの入力で「example-1」を設定することによって、
テーブルが生成されたタイミングでトリガーが発火するようになる。
以上で、BigQueryにて設定したスケジュールが実行完了後にGCSにテーブル情報をCSVに変換してファイルを送信するようになる
あとがき
Rundeckのオンプレのサーバをクラウドに移行した際に
サービスアカウントが切り替わっており、GSの実行権限が付与されてなかった。
内容自体は「BQ内で完結するテーブル生成」と「GCSにそのテーブルデータを送信」といった
結構小規模な機能の利用だったので、GCPで完結するようにした。
大した内容では無いので、ココで実装したメモを残します。
Author And Source
この問題について([memo] BigQueryのScheduleとCloud FunctionsでGCSにテーブル情報を送信), 我々は、より多くの情報をここで見つけました https://qiita.com/goudon/items/2f6b8b986236ff1f679d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .