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

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へのストリーミング挿入

 

このブログは株式会社CoLabMixによる技術ブログです。

GCP、AWSなどでのインフラ構築・運用や、クローリング・分析・検索などを主体とした開発を行なっています。

Ruby on RailsやDjango、Pythonなどの開発依頼などお気軽にお声がけください。

開発パートナーを増やしたいという企業と積極的に繋がっていきたいです。

お問い合わせやご依頼・ご相談など

関連記事

  1. Scrapyでデータ取得でクローリングで取得したURLから検索する(S…

  2. Elasticsearch 6 を使ったデータ検証 その6( Aggr…

  3. Dockerfileを使った基本的なDockerの動作

  4. CentOS7にZABBIXサーバのインストール

  5. SublimeText3でリモートのサーバ上にあるファイルを開いたり編…

  6. ElasticSearchでjava.lang.OutOfMemory…