BigQueryをPythonで利用してみます。
BigQueryでは「BigQuery-Python」やpandasコミュニティ主導の開発での「pandas-gbq」のライブラリがあるようです。
ただ、Googleの公式ライブラリは「google-cloud-bigquery」のようなので、今回はそちらを使って試してみます。
尚、「pandas-gbq」ではpandas DataFramesを使ったデータの操作が非常に便利なようなので事例など多くあります。
実際にデータ操作では非常に有用な例も多くあるようです。
ただ、「pandas-gbq」でも内部的には「google-cloud-bigquery」ライブラリを利用しているということで、pandasを利用していない場合などは「google-cloud-bigquery」が良いかもしれません。
以下にサポートされていない機能やクエリの実行構文の差などについても記載があります。
・pandas-gbq からの移行
https://cloud.google.com/bigquery/docs/pandas-gbq-migration
インストールと標準SQLとレガシーSQLの違いについて
インストールは以下で実施できます。
1 2 3 |
$ pip install --upgrade google-cloud-bigquery |
尚、以下では「標準SQL」と「レガシーSQL」を使ってシンプルなクエリの実行を行います。
標準SQLとレガシーSQLの違いなどは以下のドキュメントで確認できます。
・標準SQLへの移行
https://cloud.google.com/bigquery/docs/reference/standard-sql/migrating-from-legacy-sql?hl=ja
BigQuery2.0で、BigQueryは標準SQLのサポートをリリースし、BigQuerySQLをレガシーSQLと改名しています。
推奨は「標準SQL」です。
構文などの違いも大きいですが、標準SQLではupdateなどのクエリが使えるのも大きいです。
ただ、基本的にはBigQueryはデータ操作言語(DML)ではなく、データ取得系メソッドの利用を主とするので利用には制限がかかります。
・データ操作言語
https://cloud.google.com/bigquery/docs/reference/standard-sql/data-manipulation-language#quotas
・割り当てと制限
https://cloud.google.com/bigquery/quotas#data_manipulation_language_statements
DMLの制限に関しては以下のように厳しいものがあります。
- UPDATE、DELETE、および MERGE の各ステートメントを組み合わせた実行数の 1 日あたりのテーブルあたり最大値 - 200
- UPDATE、DELETE、および MERGE の各ステートメントを組み合わせた実行数の 1 日あたりのプロジェクトあたり最大値 - 10,000
- INSERT ステートメント実行数の 1 日あたりのテーブルあたり最大値 - 1,000
更新系などを多く使うようなものは基本的にはBigQueryには向いておりません。
標準SQLでの記載方法
データ取得のSQLを記載しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
from google.cloud import bigquery import os credentials_json = './credentials.json' os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = credentials_json ## Set Project ID project = "project_name" ## Set Dataset dataset = "dataset" ## Set Table table = "table" bigquery_client = bigquery.Client() query = "SELECT field FROM `{0}.{1}.{2}`".format(project, dataset, table) rows = bigquery_client.query(query).result() for row in rows: print(row[0]) |
レガシー SQLでの記載方法
データ取得のSQLを記載しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
from google.cloud import bigquery import os credentials_json = './credentials.json' os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = credentials_json ## Set Project ID project = "project_name" ## Set Dataset dataset = "dataset" ## Set Table table = "table" bigquery_client = bigquery.Client() query = 'SELECT field FROM [{0}:{1}.{2}]'.format(project, dataset, table) config = bigquery.QueryJobConfig() config.use_legacy_sql = True rows = bigquery_client.query(query, job_config=config).result() for row in rows: print(row[0]) |
こちらが「google-cloud-bigquery」ライブラリを利用した基本的な操作となります。
★関連記事
・Pythonでのgoogle-cloud-bigqueryライブラリを利用したBigQueryのシンプルなデータ挿入とデータ更新
・Pythonでのgoogle-cloud-bigqueryライブラリを利用したBigQueryでのパーティションを利用したデータの挿入と検索
・Pythonでのgoogle-cloud-bigqueryライブラリを利用したBigQueryへのストリーミング挿入
このブログは株式会社CoLabMixによる技術ブログです。
GCP、AWSなどでのインフラ構築・運用や、クローリング・分析・検索などを主体とした開発を行なっています。
Ruby on RailsやDjango、Pythonなどの開発依頼などお気軽にお声がけください。
開発パートナーを増やしたいという企業と積極的に繋がっていきたいです。