めっちゃハマった(3H)のでここに記す.
ドキュメントもなく辛い
手順まとめ
モジュールのinstall
$ pip install google-cloud-bigquery-datatransfer
認証ファイル
サービスアカウントでやりました。作成方法はskipします(ぐぐったらすぐ出てくるので)
import os os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = './xxx.json'
あと、IAMで「BigQuery Data Transfer Service エージェント」の設定をしておいてください.
チュートリアル(?)
https://cloud.google.com/bigquery/transfer/docs/reference/libraries
from google.cloud import bigquery_datatransfer client = bigquery_datatransfer.DataTransferServiceClient() project = 'xxx' # project idはその名前の通り, 名前だけじゃなくてIDも指定していれること exp) `xxx-12345` みたいな # Get the full path to your project. parent = client.project_path(project) print('Supported Data Sources:') # Iterate over all possible data sources. for data_source in client.list_data_sources(parent): print('{}:'.format(data_source.display_name)) print('\tID: {}'.format(data_source.data_source_id)) print('\tFull path: {}'.format(data_source.name)) print('\tDescription: {}'.format(data_source.description))
Amazon S3: ID: amazon_s3 Full path: projects/xxx/dataSources/amazon_s3 Description: Data from Amazon S3 to BigQuery
よくわからんけど、こんなのがでてくる。とりあえずこれがでてきてたらAPI認証はすんだ.
Pythonで構成を用意して転送の設定を行う
↑の続きでいくと
my_transfer_config = {} response = client.create_transfer_config(parent, my_transfer_config)
こうやるとデータ転送の設定(? jobかな? 呼び方がわからない)を作ってくれる。
が、ここからとてもめんどかった。 my_transfer_config
を dict
で用意しようとしたのだけど
my_transfer_config = { 'display_name': 'test5', 'data_source_id': 'google_cloud_storage', 'schedule': 'every 1 hours', 'destination_dataset_id': 'database', 'params': {} # ここにどう指定すればいいのかわからん }
params
の指定がわからずに時を過ごす
で、できたので晒す。
githubを漁った結果、↓のコードを見つけた
ここを参考にして実行した結果.
from google.protobuf import json_format as google_json_format from google.cloud import bigquery_datatransfer_v1 # 先にparamsのvalueを用意しておく # 何故か全部まとめてやろうとすると死ぬ my_transfer_config_params = google_json_format.ParseDict({ "params": { "destination_table_name_template": 'xxx', "data_path_template": "gs://xxx/*.json", "max_bad_records": "10", 'skip_leading_rows': '0', "delete_source_files": "true", 'file_format': 'JSON', 'field_delimiter': ',' } }, bigquery_datatransfer_v1.types.TransferConfig()) my_transfer_config = { 'display_name': 'xxx', 'data_source_id': 'google_cloud_storage', 'schedule': 'every 1 hours', 'destination_dataset_id': 'xxx', 'params': my_transfer_config_params.params } # 設定を作成 my_transfer_config_obj = bigquery_datatransfer_v1.types.TransferConfig(**my_transfer_config) # 設定をrequest response = client.create_transfer_config(parent, my_transfer_config)
これでできた...疲れた