Pythonでのgoogle-cloud-bigqueryライブラリを利用したBigQueryの操作を標準SQLとレガシーSQLで実施(データの取得)

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の違いについて

インストールは以下で実施できます。

 

尚、以下では「標準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を記載しています。

 

レガシー SQLでの記載方法

データ取得のSQLを記載しています。

 

こちらが「google-cloud-bigquery」ライブラリを利用した基本的な操作となります。

★関連記事
Pythonでのgoogle-cloud-bigqueryライブラリを利用したBigQueryのシンプルなデータ挿入とデータ更新
Pythonでのgoogle-cloud-bigqueryライブラリを利用したBigQueryでのパーティションを利用したデータの挿入と検索
Pythonでのgoogle-cloud-bigqueryライブラリを利用したBigQueryへのストリーミング挿入