Python ライブラリを選択する
BigQuery では、ユースケースに応じて 3 つの Python ライブラリから選択できます。
ユースケース | 管理者 | 説明 | |
---|---|---|---|
BigQuery DataFrames | サーバーサイドによる Python ベースのデータ処理と ML オペレーション(スロットの使用など) | サーバーサイドのプッシュダウンで実装された Pandas と Scikit learn API。詳細については、BigQuery DataFrames の概要をご覧ください。 | |
pandas-gbq | クライアントサイドのデータコピーを使用した Python ベースのデータ処理 | PyData とボランティアが管理するオープンソース ライブラリ | クライアント サイドで Python DataFrame とデータをやり取りします。詳細については、ドキュメントとソースコードをご覧ください。 |
google-cloud-bigquery | BigQuery のデプロイ、管理、SQL ベースのクエリ | Google が管理するオープンソース ライブラリ | すべての BigQuery API をラップする Python パッケージ。詳細については、ドキュメントとソースコードをご覧ください。 |
pandas-gbq と google-cloud-bigquery の使用
pandas-gbq
ライブラリは、クエリを実行し、pandas データフレームを BigQuery にアップロードするシンプルなインターフェースを提供します。これは、BigQuery クライアント ライブラリ google-cloud-bigquery
のシンラッパーです。どちらのライブラリも、SQL を使用したデータ分析のサポートに重点を置いています。
ライブラリをインストールする
このガイドのコードサンプルを使用するには、pandas-gbq
パッケージと BigQuery Python クライアント ライブラリをインストールします。
pandas-gbq
パッケージと google-cloud-bigquery
パッケージをインストールします。
pip install --upgrade pandas-gbq 'google-cloud-bigquery[bqstorage,pandas]'
クエリの実行
どちらのライブラリも、BigQuery に保存されているデータのクエリをサポートしています。ライブラリ間の主な違いは次のとおりです。
pandas-gbq | google-cloud-bigquery | |
---|---|---|
デフォルトの SQL 構文 | GoogleSQL(pandas_gbq.context.dialect で構成可能) |
GoogleSQL |
クエリの構成 | クエリ リクエストの形式で辞書として送信します。 | さまざまな API 構成オプションのプロパティを含む QueryJobConfig クラスを使用します。 |
GoogleSQL 構文を使用したデータのクエリ
次の例では、プロジェクトを明示的に指定して GoogleSQL クエリを実行する方法と、明示的に指定せずに Google Cloud クエリを実行する方法を示しています。どちらのライブラリでも、プロジェクトが指定されていない場合、プロジェクトはデフォルトの認証情報から決定されます。
pandas-gbq
:
google-cloud-bigquery
:
レガシー SQL 構文を使用したデータのクエリ
次のサンプルは、レガシー SQL 構文を使用してクエリを実行する方法を示しています。クエリを GoogleSQL に更新する方法については、GoogleSQL 移行ガイドをご覧ください。
pandas-gbq
:
google-cloud-bigquery
:
BigQuery Storage API を使用してサイズが大きい結果をダウンロードする
BigQuery Storage API を使用すると、サイズが大きい結果(15~31 倍)を高速でダウンロードできます。
pandas-gbq
:
google-cloud-bigquery
:
構成を含むクエリの実行
パラメータ化クエリの実行や、クエリ結果を保存する抽出先テーブルの指定など、複雑な操作を実行するには、BigQuery API リクエストで構成を送信する必要があります。pandas-gbq
では、クエリ リクエストの形式で辞書として構成を送信する必要があります。google-cloud-bigquery
には QueryJobConfig
などのジョブ構成クラスがあり、複雑なジョブの構成に必要なプロパティが用意されています。
次のサンプルは、名前付きパラメータを使用してクエリを実行する方法を示します。
pandas-gbq
:
google-cloud-bigquery
:
BigQuery テーブルに pandas DataFrame を読み込む
どちらのライブラリも、pandas DataFrame から BigQuery の新しいテーブルへのデータのアップロードをサポートしています。主な違いは次のとおりです。
pandas-gbq | google-cloud-bigquery | |
---|---|---|
サポートされる型 | DataFrame を CSV 形式に変換して API に送信します。ネストした値や配列値はサポートされません。 | DataFrame を Parquet 形式または CSV 形式に変換してから API に送信します。ネストされた値と配列値がサポートされます。構造体と配列の値には Parquet を選択します。日付と時刻のシリアル化の柔軟性を高めるには CSV を選択します。Parquet がデフォルトの選択肢です。DataFrame をテーブルに読み込むには、pyarrow (DataFrame のデータを BigQuery API へ送信するのに使う parquet エンジン)をインストールする必要があります。 |
読み込みの構成 | 必要に応じて、テーブル スキーマを指定できます。 | さまざまな API 構成オプションのプロパティを含む LoadJobConfig クラスを使用します。 |
pandas-gbq
:
google-cloud-bigquery
:
google-cloud-bigquery
パッケージを使用するには、pyarrow
ライブラリで Pandas DataFrame を Parquet ファイルにシリアル化する必要があります。
次の方法で、pyarrow
パッケージをインストールします。
pip install pyarrow
pandas-gbq が対応していない機能
pandas-gbq
ライブラリには、データのクエリやテーブルへの書き込みに役立つインターフェースがありますが、次に挙げるような BigQuery API の機能の多くに対応していません。
- データセット管理: 新しいデータセットの作成、データセットのプロパティの更新、データセットの削除など
- pandas DataFrames 以外の形式または JSON 列を含む pandas DataFrames から BigQuery にデータを読み込む
- テーブル管理: データセット内のテーブルの一覧表示、テーブルデータのコピー、テーブルの削除など
- Cloud Storage に直接、BigQuery データをエクスポートすること
接続プールのエラーのトラブルシューティング
エラー文字列: Connection pool is full, discarding connection: bigquery.googleapis.com.
Connection pool size: 10
Python でデフォルトの BigQuery クライアント オブジェクトを使用する場合、Python HTTPAdapter のデフォルトのプールサイズは 10 であるため、最大 10 個のスレッドに制限されます。10 個を超える接続を使用するには、カスタムの requests.adapters.HTTPAdapter
オブジェクトを作成します。次に例を示します。
client = bigquery.Client() adapter = requests.adapters.HTTPAdapter(pool_connections=128, pool_maxsize=128,max_retries=3) client._http.mount("https://",adapter) client._http._auth_request.session.mount("https://",adapter) query_job = client.query(QUERY)