テーブルデータを Cloud Storage にエクスポートする
このページでは、BigQuery テーブルから Cloud Storage にデータをエクスポートまたは抽出する方法について説明します。
BigQuery にデータを読み込んだ後、さまざまな形式でデータをエクスポートできます。BigQuery は最大 1 GB のデータを 1 つのファイルにエクスポートできます。1 GB を超えるデータをエクスポートする場合は、データを複数のファイルにエクスポートする必要があります。データを複数のファイルにエクスポートすると、さまざまなサイズのファイルになります。
Dataflow などのサービスを使用すると、データを手動でエクスポートする代わりに、BigQuery から直接読み取ることができます。Dataflow を使用した BigQuery の読み取りと書き込みの詳細については、Apache Beam ドキュメントの BigQuery I/O をご覧ください。
また、EXPORT DATA
ステートメントを使用して、クエリの結果をエクスポートすることもできます。EXPORT DATA OPTIONS
を使用してビューを {storage_name} にエクスポートできます。
エクスポートの制限事項
BigQuery からデータをエクスポートするときは、次の点に注意してください。
- テーブルデータをローカル ファイル、Google スプレッドシート、Google ドライブにエクスポートすることはできません。可能なエクスポート先は Cloud Storage だけです。クエリ結果の保存については、クエリ結果のダウンロードと保存をご覧ください。
- 1 つのファイルに最大 1 GB のテーブルデータをエクスポートできます。1 GB を超えるデータをエクスポートする場合は、ワイルドカードを使用してデータを複数のファイルにエクスポートします。データを複数のファイルにエクスポートすると、さまざまなサイズのファイルになります。エクスポートするファイルサイズを制御するには、データをパーティショニングし、各パーティションをエクスポートします。
EXPORT DATA
ステートメントの使用時に生成されるファイルのサイズは保証されません。- エクスポート ジョブによって生成されるファイルの数はさまざまです。
- ネストや繰り返しのあるデータを CSV 形式でエクスポートすることはできません。ネストされたデータと繰り返しデータは、Avro、JSON、Parquet のエクスポートでサポートされています。
- データを JSON 形式でエクスポートするときは、INT64(整数)データ型が JSON 文字列としてエンコードされます。これは、そのデータが他のシステムで読み込まれるときに 64 ビットの精度を保持するためです。
- 単一のエクスポート ジョブで複数のテーブルからデータをエクスポートすることはできません。
- Google Cloud コンソールを使用してデータをエクスポートする場合、
GZIP
以外の圧縮タイプを選択することはできません。 - 保持ポリシーを使用して構成された Cloud Storage バケットにデータをエクスポートすると、BigQuery からバケットへのファイルの書き込みが失敗する場合があります。エクスポート ジョブの期間よりも長く保持期間を構成します。
- JSON 形式でテーブルをエクスポートする場合、記号
<
、>
、&
は Unicode 表記の\uNNNN
に変換されます。ここで、N
は 16 進数です。たとえば、profit&loss
はprofit\u0026loss
になります。この Unicode 変換は、セキュリティの脆弱性を回避するために行われます。 EXPORT DATA
ステートメントを使用してquery_statement
でORDER BY
句を指定しない限り、エクスポートされるテーブルデータの順序は保証されません。- BigQuery では、最初のダブル スラッシュの後に複数の連続スラッシュが含まれる Cloud Storage リソースパスはサポートされていません。Cloud Storage オブジェクトの名前には複数の連続スラッシュ("/")文字を含めることができます。一方、BigQuery では、複数の連続スラッシュは単一のスラッシュに変換されます。たとえば、リソースパス
gs://bucket/my//object//name
は Cloud Storage では有効ですが、BigQuery では機能しません。
始める前に
このドキュメントの各タスクを実行するために必要な権限をユーザーに与える Identity and Access Management(IAM)のロールを付与します。
必要な権限
このドキュメントのタスクを実行するには、次の権限が必要です。
BigQuery テーブルからデータをエクスポートするための権限
BigQuery テーブルからデータをエクスポートするには、bigquery.tables.export
IAM 権限が必要です。
次に示す各 IAM 事前定義ロールには bigquery.tables.export
権限が含まれています。
roles/bigquery.dataViewer
roles/bigquery.dataOwner
roles/bigquery.dataEditor
roles/bigquery.admin
エクスポート ジョブの実行に必要な権限
エクスポート ジョブを実行するには、bigquery.jobs.create
IAM 権限が必要です。
次の IAM 事前定義ロールには、エクスポート ジョブの実行に必要な権限が含まれています。
roles/bigquery.user
roles/bigquery.jobUser
roles/bigquery.admin
Cloud Storage バケットにデータを書き込む権限
既存の Cloud Storage バケットにデータを書き込むには、次の IAM 権限が必要です。
storage.objects.create
storage.objects.delete
次の IAM 事前定義ロールには、既存の Cloud Storage バケットにデータを書き込むために必要な権限が含まれています。
roles/storage.objectAdmin
roles/storage.admin
BigQuery での IAM のロールと権限について詳しくは、事前定義ロールと権限をご覧ください。
ロケーションに関する留意事項
データのエクスポート用に Cloud Storage バケットを同じロケーションに配置します。- BigQuery データセットが
EU
マルチリージョンにある場合、エクスポート対象のデータが含まれている Cloud Storage バケットは、同じマルチリージョンか、マルチリージョンに含まれているロケーションに存在する必要があります。たとえば、BigQuery データセットがEU
マルチリージョンにある場合、Cloud Storage バケットは EU 内のeurope-west1
ベルギー リージョンに配置できます。データセットが
US
マルチリージョンにある場合、任意のロケーションにある Cloud Storage バケットにデータをエクスポートできます。 - データセットがリージョンにある場合、Cloud Storage バケットは同じリージョンに存在する必要があります。たとえば、データセットが
asia-northeast1
の東京リージョンにある場合、Cloud Storage バケットをASIA
マルチリージョンに配置することはできません。
- BigQuery データセットや Cloud Storage バケットなどのリージョン ストレージ リソースを選択する場合は、データの地理的管理を行うための計画を作成します。
Cloud Storage のロケーションについて詳しくは、Cloud Storage ドキュメントのバケットのロケーションをご覧ください。
ロケーション間で BigQuery データを移動する
データセットの作成後にそのロケーションを変更することはできませんが、データセットのコピーを作成することはできます。また、データセットをあるロケーションから別のロケーションに移動することはできませんが、手動でデータセットを移動(再作成)することはできます。
エクスポート形式と圧縮形式
BigQuery は、エクスポートされるデータに対して次のデータ形式と圧縮形式をサポートしています。
データ形式 | サポートされている圧縮タイプ | 詳細 |
---|---|---|
CSV | GZIP | エクスポートされるデータの CSV 区切り文字を制御するには、 ネストされたデータや繰り返しデータは、サポートされていません。 |
JSON | GZIP | ネストされたデータと繰り返しデータはサポートされます。 |
Avro | DEFLATE、SNAPPY | Avro のエクスポートでは、GZIP はサポートされていません。 ネストされたデータと繰り返しデータはサポートされます。Avro のエクスポートの詳細をご覧ください。 |
Parquet | SNAPPY、GZIP、ZSTD | ネストされたデータと繰り返しデータはサポートされます。Parquet エクスポートの詳細をご覧ください。 |
データのエクスポート
テーブルデータは次の方法でエクスポートできます。
- Google Cloud コンソールを使用する
- bq コマンドライン ツールの
bq extract
コマンドを使用する - API またはクライアント ライブラリを介して
extract
ジョブを送信する
テーブルデータをエクスポートする
BigQuery テーブルからデータをエクスポートするには:
コンソール
Google Cloud コンソールで [BigQuery] ページを開きます。
[エクスプローラ] パネルで、プロジェクトとデータセットを開いて、テーブルを選択します。
詳細パネルで、[エクスポート] をクリックして [Cloud Storage にエクスポート] を選択します。
[Google Cloud Storage へのテーブルのエクスポート] ダイアログで、次の操作を行います。
- [Google Cloud Storage のロケーション] で、データをエクスポートするバケット、フォルダ、またはファイルを参照します。
- [エクスポート形式] で、エクスポートするデータの形式を CSV、JSON(改行区切り)、Avro、または Parquet から選択します。
- [圧縮] で、圧縮形式を選択するか、
None
を選択して圧縮なしにします。 - [エクスポート] をクリックしてテーブルをエクスポートします。
ジョブの進行状況を確認するには、ナビゲーションの上部にある [エクスポート] ジョブの [ジョブ履歴] を確認します。
ビューを Cloud Storage にエクスポートするには、EXPORT DATA OPTIONS
ステートメントを使用します。
SQL
EXPORT DATA
ステートメントを使用します。次の例では、mydataset.table1
という名前のテーブルから選択したフィールドをエクスポートします。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
EXPORT DATA OPTIONS ( uri = 'gs://bucket/folder/*.csv', format = 'CSV', overwrite = true, header = true, field_delimiter = ';') AS ( SELECT field1, field2 FROM mydataset.table1 ORDER BY field1 );
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
bq
bq extract
コマンドを使用し、--destination_format
フラグを指定します。
(省略可)--location
フラグを指定して、その値をロケーションに設定します。
次のフラグを使用することもできます。
--compression
: エクスポートされるファイルに使用する圧縮タイプ。--field_delimiter
: CSV エクスポートの出力ファイル内での列間の境界を示す文字。タブ区切り文字には\t
とtab
の両方を使用できます。--print_header
: 指定すると、CSV などのヘッダーを持つ形式でヘッダー行が出力されます。
bq extract --location=location \ --destination_format format \ --compression compression_type \ --field_delimiter delimiter \ --print_header=boolean \ project_id:dataset.table \ gs://bucket/filename.ext
ここで
- location はロケーションの名前です。
--location
フラグは省略可能です。たとえば、BigQuery を東京リージョンで使用している場合は、このフラグの値をasia-northeast1
に設定します。.bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。 - format は、エクスポートされるデータの形式です(
CSV
、NEWLINE_DELIMITED_JSON
、AVRO
、またはPARQUET
)。 - compression_type は、データ形式に対してサポートされる圧縮タイプです。エクスポート形式と圧縮形式をご覧ください。
- delimiter は、CSV エクスポートの列間の境界を示す文字です。タブの名前として受け入れられるのは
\t
とtab
です。 - boolean は
true
またはfalse
です。true
に設定すると、データ形式がヘッダーをサポートする場合に、エクスポートされるデータにヘッダー行が出力されます。デフォルト値はtrue
です。 - project_id はプロジェクト ID です。
- dataset はソース データセットの名前です。
- table は、エクスポートするテーブルです。パーティション デコレータを使用する場合は、テーブルパスを単一引用符で囲むか、
$
文字をエスケープする必要があります。 - bucket は、データのエクスポート先の Cloud Storage バケットの名前です。BigQuery データセットと Cloud Storage バケットは同じロケーションに存在する必要があります。
- filename.ext は、エクスポートされるデータファイルの名前と拡張子です。ワイルドカードを使用して複数のファイルにエクスポートできます。
例:
たとえば、次のコマンドは、mydataset.mytable
を myfile.csv
という名前の gzip 圧縮ファイルにエクスポートします。myfile.csv
は、example-bucket
という名前の Cloud Storage バケットに保存されます。
bq extract \ --compression GZIP \ 'mydataset.mytable' \ gs://example-bucket/myfile.csv
デフォルトの出力形式は CSV です。JSON または Avro 形式でエクスポートするには、destination_format
フラグを NEWLINE_DELIMITED_JSON
または AVRO
に設定します。次に例を示します。
bq extract \ --destination_format NEWLINE_DELIMITED_JSON \ 'mydataset.mytable' \ gs://example-bucket/myfile.json
次のコマンドは、mydataset.mytable
を、Snappy を使用して圧縮された Avro ファイルにエクスポートします。ファイル名は、myfile.avro
になります。myfile.avro
は、example-bucket
という名前の Cloud Storage バケットにエクスポートされます。
bq extract \ --destination_format AVRO \ --compression SNAPPY \ 'mydataset.mytable' \ gs://example-bucket/myfile.avro
次のコマンドは、mydataset.my_partitioned_table
の単一パーティションを Cloud Storage の CSV ファイルにエクスポートします。
bq extract \ --destination_format CSV \ 'mydataset.my_partitioned_table$0' \ gs://example-bucket/single_partition.csv
API
データをエクスポートするには、extract
ジョブを作成し、ジョブ構成に入力します。
(省略可)ジョブリソースの jobReference
セクションにある location
プロパティでロケーションを指定します。
抽出ジョブを作成し、抽出元の BigQuery データと抽出先の Cloud Storage を指定します。
プロジェクト ID、データセット ID、テーブル ID を含む
sourceTable
構成オブジェクトを使用して、ソーステーブルを指定します。destination URI(s)
プロパティは、gs://bucket/filename.ext
の形式で完全修飾する必要があります。各 URI に '*' ワイルドカード文字を 1 つ含めることができますが、このワイルドカードはバケット名より後にある必要があります。configuration.extract.destinationFormat
プロパティを設定して、データ形式を指定します。たとえば、JSON ファイルとしてエクスポートするには、このプロパティの値をNEWLINE_DELIMITED_JSON
に設定します。ジョブ ステータスを確認するには、最初のリクエストで返されるジョブの ID を指定して jobs.get(job_id) を呼び出します。
status.state = DONE
である場合、ジョブは正常に完了しています。status.errorResult
プロパティが存在する場合は、リクエストが失敗したことを意味し、該当するオブジェクトにエラーを説明する情報が格納されます。status.errorResult
が存在しない場合、ジョブは正常に完了しましたが、致命的でないエラーが発生した可能性があります。致命的でないエラーは、返されたジョブ オブジェクトのstatus.errors
プロパティに格納されています。
API に関する注:
おすすめの方法として、
jobs.insert
を呼び出して読み込みジョブを作成する際に、一意の ID を生成して、その ID をjobReference.jobId
として渡します。この手法を使用すると、ネットワーク障害時にクライアントは既知のジョブ ID を使ってポーリングまたは再試行できるので、頑健性が向上します。特定のジョブ ID で
jobs.insert
を呼び出す操作は「べき等」です。つまり、同じジョブ ID で何回でも再試行できますが、成功するオペレーションはそのうちの 1 回だけです。
C#
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの C# の手順に沿って設定を行ってください。詳細については、BigQuery C# API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Go
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Go の手順に沿って設定を行ってください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Java の手順に沿って設定を行ってください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Node.js
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Node.js の手順に沿って設定を行ってください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。