Google BigQueryのデータをSQLコマンド「EXPORT DATA」で直接Google Cloud Storageにエクスポート出来るようになりました!

2020.10.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

先日(2020/10/16)のGCP/Google BigQueryのリリースノートにて、幾つかの興味深いトピックがありました。詳細については下記公式ブログをご参照ください。

その中で、外部ストレージに関する読み書き(Reading from and writing to external storage)に関するものも含まれていました。関連する文章を上記エントリから抜粋します。

BigQuery provides users the ability to read data in external storage buckets. The new SQL commands allow users to configure tables within BigQuery pointing to these buckets as well as export data from queries into storage buckets. (BigQueryでは、ユーザーが外部ストレージ バケット内のデータを読み取る機能が提供されます。新しいSQLコマンドでは、これらのバケットを指すBigQuery内のテーブルを構成したり、クエリからストレージ・バケットにデータをエクスポートしたりすることができます。)

ん?ってことはBigQueryから直接Google Cloud Storage(GCS)にファイルをエクスポート出来る?

という訳で、当エントリでは「"それ"が出来るようになりました!」という件についてその内容を紹介したいと思います。

目次

 

これまでのエクスポート手段

実は、これまでの「BigQueryデータのGCSへのエクスポート」は、下記のような形で段階を踏んでいく必要がありました。ダイレクトにエクスポートする、という手段は実は無かったのです。

 

BigQueryからダイレクトにGoogle Cloud Storage(GCS)にデータをエクスポートする方法

今回のリリースを経ることによって、SQLコマンド一発で直接、GCSへのデータエクスポートが可能となりました。

下記公式ドキュメントに記載されているEXPORT DATAコマンドを使うことで処理を実現出来ます。

EXPORT DATAコマンドの実行例がこちら。簡単ではありますが、用意したテストデータを以下のような指定内容でSQL文として実行し、出力させることが出来ます。

--DROP TABLE cmbqdataset.export_sample;
--CREATE TABLE cmbqdataset.export_sample ( user_id INT64, user_name STRING, birthday DATE );
--INSERT INTO cmbqdataset.export_sample
--VALUES
--  (1,'AAAAA','2020-01-01'),
--  (2,'BBBBB','2020-02-02'),
--  (3,'CCCCC','2020-03-03'),
--  (4,'DDDDD','2020-04-04'),
--  (5,'EEEEE','2020-05-05'),
--  (6,'FFFFF','2020-06-06'),
--  (7,'GGGGG','2020-07-07'),
--  (8,'HHHHH','2020-08-08'),
--  (9,'IIIII','2020-09-09'),
--  (10,'JJJJJ','2020-10-10');
--SELECT * FROM cmbqdataset.export_sample ORDER BY user_id;

EXPORT DATA OPTIONS(
  uri='gs://xxxxxxxxxxx-gcs-bucket-tokyo/export_sample/*.csv.gz', -- ファイルパスを指定。uriにはワイルドカード表記とする必要がある(ファイル名個別指定は出来ない)
  compression='GZIP',  -- 圧縮形式を指定(GZIP, DEFLATE, SNAPPY)。未指定の場合は圧縮無し
  format='CSV',        -- ファイルフォーマットを指定。CSV, JSON, AVROが選択可能
  overwrite=true,      -- ファイルが存在していた場合の上書き有無。未指定の場合はfalse
  header=true,         -- ヘッダ行の有無。未指定の場合はfalse
  field_delimiter=','  -- 区切り文字を文字列として指定
) AS
SELECT * FROM cmbqdataset.export_sample ORDER BY user_id;

URIパスのワイルドカード指定に関する詳細等はこちらのドキュメントも合わせてご参照ください。

実際にSQLを実行した時の内容がこちら。

そして、指定したGCSバケットの中身を確認してみます。ちゃんと出力されていますね!

 

まとめ

という訳で、EXPORT DATAコマンドによるBigQueryからのGoogle Cloud Storage(GCS)への直接エクスポートが可能になりました!というお知らせでした。特に意識せず、SQLでサクッとエクスポートが出来るようになったのは嬉しいですね。バリバリ使っていこうと思います。