テーブルデータを 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
を使用してビューを Cloud Storage にエクスポートできます。
エクスポートの制限事項
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 はバケットへのファイルの書き込みを再試行することがあります。バケットの保持ポリシーによりファイルが上書きされない場合、これらの再試行は失敗する可能性があります。保持ポリシーのある Cloud Storage バケットにデータをエクスポートする必要がある場合は、エクスポートを開始する前にポリシーを無効にします。
- 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 では機能しません。 - エクスポート ジョブの実行中に 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] から選択します。
- [Compression] で、圧縮形式を選択するか、
None
を選択して圧縮なしにします。 - [エクスポート] をクリックしてテーブルをエクスポートします。google3/googledata/devsite/site-cloud/ja/bigquery/docs/introduction-sql.md ジョブの進行状況を確認するには、ナビゲーションの上部にある [ジョブ履歴] で [エクスポート] ジョブを確認します。
ビューを 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 に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
PHP
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある PHP の設定手順を完了してください。詳細については、BigQuery PHP API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Ruby
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Ruby の設定手順を完了してください。詳細については、BigQuery Ruby API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Avro エクスポートの詳細
BigQuery は次の方法で Avro 形式のデータを表現します。
- エクスポートされたファイルは Avro コンテナ ファイルになります。
- 各 BigQuery 行は 1 つの Avro レコードとして表されます。ネストされたデータは、ネストされたレコード オブジェクトによって表されます。
REQUIRED
フィールドは、対応する Avro 型として表されます。たとえば、BigQuery のINTEGER
型は Avro のLONG
型に対応しています。NULLABLE
フィールドは、対応する型と "null" の Avro ユニオンとして表されます。REPEATED
フィールドは Avro 配列として表されます。TIMESTAMP
データ型は、抽出ジョブとエクスポート データ SQL の両方のデフォルトでtimestamp-micros
論理型(Avro のLONG
型にアノテーションが追加されます)として表されます。(注意:use_avro_logical_types=False
をExport Data Options
に追加して論理型を無効にし、タイムスタンプ列ではなくstring
型を使用することができますが、抽出ジョブでは常に Avro の論理型を使用します。)DATE
データ型はエクスポート データ SQL のデフォルトでdate
論理型(Avro のINT
型にアノテーションが追加されます)として表されますが、抽出ジョブのデフォルトではstring
型として表されます。(注:use_avro_logical_types=False
をExport Data Options
に追加して論理型を無効にしたり、フラグ--use_avro_logical_types=True
を使用して抽出ジョブの論理型を有効にしたりできます)。TIME
データ型はエクスポート データ SQL のデフォルトでtimestamp-micro
論理型(Avro のLONG
型にアノテーションが追加されます)として表されますが、抽出ジョブのデフォルトではstring
型として表されます。(注:use_avro_logical_types=False
をExport Data Options
に追加して論理型を無効にしたり、フラグ--use_avro_logical_types=True
を使用して抽出ジョブの論理型を有効にしたりできます)。DATETIME
データ型はデフォルトではエクスポート データ SQL のデフォルトで Avro のSTRING
型(カスタムの名前付き論理型datetime
の文字列型)として表されますが、抽出ジョブのデフォルトではstring
型として表されます。(注:use_avro_logical_types=False
をExport Data Options
に追加して論理型を無効にしたり、フラグ--use_avro_logical_types=True
を使用して抽出ジョブの論理型を有効にしたりできます)。- RANGE 型は Avro エクスポートではサポートされていません。
パラメータ化された NUMERIC(P[, S])
データ型と BIGNUMERIC(P[, S])
データ型の場合、精度とスケール型のパラメータが Avro の decimal 論理型に変換されます。
Avro 形式を GZIP 圧縮とともに使用することはできません。Avro データを圧縮するには、bq コマンドライン ツールまたは API を使用して、Avro データでサポートされている圧縮タイプの 1 つ(DEFLATE
または SNAPPY
)を指定します。
Parquet エクスポートの詳細
BigQuery は、GoogleSQL のデータ型を次の Parquet データ型に変換します。
BigQuery のデータ型 | Parquet のプリミティブ型 | Parquet の論理型 |
---|---|---|
整数 | INT64 |
NONE |
数値 | FIXED_LEN_BYTE_ARRAY |
DECIMAL (precision = 38, scale = 9) |
Numeric(P[, S]) | FIXED_LEN_BYTE_ARRAY |
DECIMAL (precision = P, scale = S) |
BigNumeric | FIXED_LEN_BYTE_ARRAY |
DECIMAL (precision = 76, scale = 38) |
BigNumeric(P[, S]) | FIXED_LEN_BYTE_ARRAY |
DECIMAL (precision = P, scale = S) |
浮動小数点数 | FLOAT |
NONE |
ブール値 | BOOLEAN |
NONE |
文字列 | BYTE_ARRAY |
STRING (UTF8) |
バイト | BYTE_ARRAY |
NONE |
日付 | INT32 |
DATE |
日時 | INT64 |
TIMESTAMP (isAdjustedToUTC = false, unit = MICROS) |
時間 | INT64 |
TIME (isAdjustedToUTC = true, unit = MICROS) |
タイムスタンプ | INT64 |
TIMESTAMP (isAdjustedToUTC = false, unit = MICROS) |
地域 | BYTE_ARRAY |
GEOGRAPHY (edges = spherical) |
Parquet スキーマでは、ネストされたデータをグループとして表し、繰り返しレコードを繰り返しグループとして表します。BigQuery でネストされた繰り返しデータを使用する詳しい方法については、ネストされた繰り返し列の指定をご覧ください。
DATETIME
型には、次の回避策を使用できます。
- ステージング テーブルにファイルを読み込みます。その後、SQL クエリを使用してフィールドを
DATETIME
にキャストし、結果を新しいテーブルに保存します。詳細については、列のデータ型の変更をご覧ください。 - 読み込みジョブで
--schema
フラグを使用してテーブルのスキーマを指定します。日時列をcol:DATETIME
として定義します。
GEOGRAPHY
論理型は、エクスポートされたファイルに追加された GeoParquet メタデータで表されます。
1 つまたは複数のファイルへのデータのエクスポート
destinationUris
プロパティには、BigQuery によるファイルの 1 つ以上のエクスポート先とファイル名を指定します。
BigQuery は URI ごとに 1 つのワイルドカード演算子(*)をサポートします。ワイルドカードは、バケット名の中を除いて URI のどこでも使用できます。ワイルドカード演算子を使用すると、指定したパターンに基づいて複数の分割ファイルが作成されます。ワイルドカード演算子は、左側に 0 が埋められた 12 桁の数値(0 から始まるシーケンス番号)に置き換えられます。たとえば、ファイル名の最後にワイルドカードがある URI の場合、最初のファイルに 000000000000
が追加され、2 番目のファイルに 000000000001
が追加されます。このパターンが続きます。
destinationUris
プロパティで使用できるオプションを次の表に示します。
destinationUris オプション |
|
---|---|
単一の URI |
1 GB 以下のテーブルデータをエクスポートする場合は、単一の URI を使用します。ほとんどの場合、エクスポートされるデータは最大値の 1 GB に満たないため、このオプションは最も一般的なユースケースとなります。 このオプションは、 プロパティの定義:
作成されるファイル: gs://my-bucket/file-name.json |
単一のワイルドカード URI |
エクスポートされるデータが最大値の 1 GB を超えそうな場合は、単一のワイルドカード URI を使用します。データは、指定したパターンに基づいて複数のファイルに分割されます。エクスポートされたファイルのサイズは一定ではありません。 ファイル名以外の URI コンポーネントでワイルドカードを使用する場合、データをエクスポートする前に、そのパス コンポーネントが存在していないことを確認してください。 プロパティの定義:
作成されるファイル: gs://my-bucket/file-name-000000000000.json gs://my-bucket/file-name-000000000001.json gs://my-bucket/file-name-000000000002.json ... |
エクスポートするファイルのサイズを制限する
1 回に 1 GB を超えるデータをエクスポートする場合は、ワイルドカードを使用して複数のファイルにデータをエクスポートする必要があります。また、ファイルサイズは異なります。エクスポートする各ファイルの最大サイズを制限する必要がある場合は、データをランダムに分割してから各パーティションをファイルにエクスポートするという方法があります。
- 必要なパーティションの数を決定します。これは、データの合計サイズを、選択したエクスポート ファイルのサイズで割った値です。たとえば、8,000 MB のデータがあり、各エクスポート ファイルを約 20 MB にする場合、400 パーティションが必要です。
export_id
というランダムに生成された新しい列でパーティション分割およびクラスタ化される、新しいテーブルを作成します。次の例は、選択したファイルサイズにするためにn
パーティションを必要とする既存のテーブルsource_table
から新しいprocessed_table
を作成する方法を示しています。CREATE TABLE my_dataset.processed_table PARTITION BY RANGE_BUCKET(export_id, GENERATE_ARRAY(0, n, 1)) CLUSTER BY export_id AS ( SELECT *, CAST(FLOOR(n*RAND()) AS INT64) AS export_id FROM my_dataset.source_table );
0 から
n-1
までの整数i
ごとに、次のクエリでEXPORT DATA
ステートメントを実行します。SELECT * EXCEPT(export_id) FROM my_dataset.processed_table WHERE export_id = i;
圧縮されたテーブルの抽出
Go
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Go の設定手順を完了してください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Node.js
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Node.js の設定手順を完了してください。詳細については、BigQuery Node.js API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
テーブル メタデータをエクスポートする
BigLake マネージド テーブルからテーブル メタデータをエクスポートするには、次の SQL ステートメントを使用します。
EXPORT TABLE METADATA FROM `[[PROJECT_NAME.]DATASET_NAME.]TABLE_NAME`;
次のように置き換えます。
- PROJECT_NAME: テーブルのプロジェクトの名前。値は、デフォルトで、このクエリを実行するプロジェクトに設定されます。
- DATASET_NAME: テーブルのデータセットの名前。
- TABLE_NAME: テーブルの名前。
エクスポートされたメタデータは STORAGE_URI/metadata
フォルダにあります。ここで、STORAGE_URI はオプションで設定されたテーブルのストレージ ロケーションです。
使用例
この例は、Cloud Storage にデータをエクスポートする方法を示しています。
エンドポイント ログから Cloud Storage に継続的にデータをストリーミングしているとします。バックアップとアーカイブの目的で、毎日のスナップショットが Cloud Storage にエクスポートされます。最適な選択は、特定の割り当てと制限に従う必要がある抽出ジョブです。
jobReference.jobId
として一意の ID を渡し、API またはクライアント ライブラリを使用して抽出ジョブを送信します。抽出ジョブは非同期です。ジョブの作成に使用された一意のジョブ ID を使用して、ジョブのステータスを確認します。status.status
が DONE
の場合、ジョブは正常に完了しています。status.errorResult
が存在する場合は、ジョブが失敗するため、再試行する必要があります。
バッチデータ処理
決められた期限までにデータを読み込むために、夜間のバッチジョブを使用するとします。この読み込みジョブが完了すると、前のセクションで説明したように、統計情報を含むテーブルがクエリから実体化されます。このテーブルのデータは、取得して PDF レポートにコンパイルし、規制機関に送信されます。
読み取る必要があるデータの量は少ないため、tabledata.list
API を使用して、テーブルのすべての行を JSON 辞書形式で取得します。データページが複数ある場合は、結果に pageToken
プロパティが設定されます。次のページの結果を取得するには、別の tabledata.list
呼び出しを行い、トークン値を pageToken
パラメータとして指定します。API 呼び出しが 5xx エラーで失敗した場合は、指数バックオフで再試行します。ほとんどの 4xx エラーは再試行できません。BigQuery エクスポートとレポート生成をより適切に分離するには、結果をディスクに保存する必要があります。
割り当てポリシー
エクスポート ジョブの割り当てについては、「割り当てと制限」のページのエクスポート ジョブをご覧ください。
エクスポート ジョブの使用状況は INFORMATION_SCHEMA
で確認できます。エクスポート ジョブの JOBS_BY_*
システム テーブルのジョブエントリには、合計使用量をモニタリングして、1 日あたり 50 TiB 未満にするために使用できる total_processed_bytes
値が含まれます。INFORMATION_SCHEMA.JOBS
ビューに対してクエリを実行して total_processed_bytes
値を取得する方法については、INFORMATION_SCHEMA.JOBS
スキーマをご覧ください。
現在の割り当て使用量を確認する
クエリ、読み込み、抽出、コピージョブの現在の使用状況を確認するには、INFORMATION_SCHEMA
クエリを実行して、指定した期間に実行されたジョブに関するメタデータを表示します。現在の使用量と割り当て上限を比較することで、特定の種類のジョブの割り当て使用量を確認できます。次のクエリの例では、INFORMATION_SCHEMA.JOBS
ビューを使用して、プロジェクトごとにクエリ、読み込み、抽出、コピーの各ジョブの数を一覧表示します。
SELECT sum(case when job_type="QUERY" then 1 else 0 end) as QRY_CNT, sum(case when job_type="LOAD" then 1 else 0 end) as LOAD_CNT, sum(case when job_type="EXTRACT" then 1 else 0 end) as EXT_CNT, sum(case when job_type="COPY" then 1 else 0 end) as CPY_CNT FROM `region-eu`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE date(creation_time)= CURRENT_DATE()
エクスポートしたバイト数の通知を提供する Cloud Monitoring アラート ポリシーを設定できます。
Google Cloud コンソールで、[Monitoring] ページに移動します。
ナビゲーション パネルで、[Metrics Explorer] を選択します。
MQL クエリエディタで、次の例に示すように 1 日あたりのエクスポート バイト数をモニタリングするためのアラートを設定します。
fetch consumer_quota | filter resource.service == 'bigquery.googleapis.com' | { metric serviceruntime.googleapis.com/quota/rate/net_usage | align delta_gauge(1m) | group_by [resource.project_id, metric.quota_metric, resource.location], sum(value.net_usage) ; metric serviceruntime.googleapis.com/quota/limit | filter metric.limit_name == 'ExtractBytesPerDay' | group_by [resource.project_id, metric.quota_metric, resource.location], sliding(1m), max(val()) } | ratio | every 1m | condition gt(val(), 0.01 '1')
アラートを設定するには、[クエリを実行] をクリックします。
詳細については、MQL のアラート ポリシーをご覧ください。
トラブルシューティング
抽出ジョブの問題を診断するには、ログ エクスプローラを使用して、特定の抽出ジョブのログを確認し、考えられるエラーを特定します。次のログ エクスプローラ フィルタは、抽出ジョブに関する情報を返します。
resource.type="bigquery_resource"
protoPayload.methodName="jobservice.insert"
(protoPayload.serviceData.jobInsertRequest.resource.jobConfiguration.query.query=~"EXPORT" OR
protoPayload.serviceData.jobCompletedEvent.eventName="extract_job_completed" OR
protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.query.query=~"EXPORT")
料金
データ エクスポートの料金については、BigQuery の料金ページをご覧ください。
データのエクスポート後は、Cloud Storage にデータを保存することで料金が発生します。詳しくは、Cloud Storage の料金をご覧ください。
テーブルのセキュリティ
BigQuery でテーブルへのアクセスを制御するには、テーブルのアクセス制御の概要をご覧ください。
次のステップ
- Google Cloud コンソールの使用で、Google Cloud コンソールの詳細を確認する。
- bq コマンドライン ツールの詳細については、bq コマンドライン ツールの使用をご覧ください。
- BigQuery API クライアント ライブラリを使ってアプリケーションを作成する方法を学習するには、クライアント ライブラリ クイックスタート ガイドをご覧ください。