G-gen の大津です。今回は Google Cloud (旧称 GCP) の BigQuery Data Transfer Service を使って、東京リージョンの Amazon S3 にあるデータを BigQuery に取り込む方法をご紹介します。
はじめに
前回の記事ではBigQuery Omniを使ってAmazon S3のデータに対してBigQueryからクエリを実行する方法をご紹介しました。
blog.g-gen.co.jp
BigQuery Omni を使うことでBigQueryにデータ転送することなく、簡単にBigQueryからAmazon S3へクエリを発行できます。
しかし BigQuery の特徴である超高速なクエリを活用するには、データを BigQuery 内部ストレージに配置したほうが、高いパフォーマンスが出ます。
また BigQuery Omni の制約として、まだ AWS 東京リージョンの S3 バケットをデータソースとして使用することが出来ません (2022 年 6 月現在) 。
そこで今回は別機能である BigQuery Data Transfer Service を使って、東京リージョンの Amazon S3 のデータを BigQuery に取り込む方法をご紹介したいと思います。
BigQuery Data Transfer Service とは
BigQuery Data Transfer Service とは Google の SaaS アプリケーションや Amazon S3 、 Azure Blob Storage などの外部ストレージサービスから BigQueryの内部ストレージにデータをコピーする Google Cloud のフルマネージドサービスです。
当機能では GUI 操作・ノーコード でデータ転送ジョブを作成できます。
決まった間隔や日時に実行される 定期実行 のほか、任意のタイミングでの オンデマンド実行 も可能です。
転送処理の失敗時にはメールで担当者へエラー通知をしたり、あるいは Cloud Pub/Sub へのメッセージ投入が可能です。
サービスの詳細は以下の Google Cloud 公式ページを参照ください。
料金
BigQuery Data Transfer Service の利用自体は 無料 です。
ただし、以下の課金は発生することにご留意ください。
- BigQuery のストレージ料金
- Amazon S3など転送元クラウドサービスのアウトバウンドのデータ転送料金
注意点
- 対応ファイル形式は csv / JSON / Avro / Parquet / ORC
- BigQuery から外部へのエクスポートは不可
- AWS など外部ストレージの 認証情報が必要
- Amazon S3 での転送スケジュールの最短間隔は24時間に1度
- 24 時間よりも短い時間で定期的なファイルを取り込むときは転送スケジュールを複数に分けるなどの工夫が必要
- 転送先である BigQuery のテーブルには 予めスキーマを定義 する必要あり
Storage Transfer Serviceとの違い
Google Cloud には似た名前である Storage Transfer Service と言うサービスがあります。
これは当記事でご紹介する BigQuery Data Transfer Service とは別サービスになります。
簡単に違いを説明すると
- BigQuery Data Transfer Serviceは転送先がBigQuery
- Storage Transfer Service は転送先がCloud Storage
であるという点です。
では実際に BigQuery Data Transfer Service を使って Amazon S3 のデータを BigQuery に取り込みましょう。
設定手順
AWSでの操作
S3バケットの作成
AWSの東京リージョンにS3バケットを作成し、サンプルデータを保存しました。
サンプルデータは過去120年のオリンピックの結果データを使っています。
IAMユーザーの作成
続いてBigQuery Data Transfer Serviceで使用するIAMユーザーを作成し、シークレットキーとアクセスキーを発行します。
また作成したIAMユーザーに「AmazonS3ReadOnlyAccess」のアクセスポリシーをアタッチします。
Google Cloudでの操作
BigQueryデータセットとテーブルの作成
コピー先となるBigQueryに空のテーブルを用意します。
空のテーブルには、事前にスキーマの定義が必要です。
サンプルデータの内容を確認し、テーブルのスキーマを定義します。
これで受け入れ先となるBigQueryの準備が出来ました。
転送ジョブの作成
BigQuery Data Transfer Serviceの転送設定を行います。BigQueryのメニューから「データ転送」をクリックします。
今回はAmazon S3からの転送を行うのでデータソースはAmazon S3を選択します。
BigQuery Data Transfer ServiceはAmazon S3以外にもさまざまなデータソースに対応しています。
データ転送のスケジュールを設定します。設定はオンデマンド(手動実行)から毎日・毎週・毎月と柔軟なスケジュールを設定が可能です。
今回は毎日の夜間バッチと言う想定でAM00:30に設定しています。
コピー元であるAmazon S3の情報とIAMユーザー(シークレットキーとアクセスキー)の情報、そしてコピー先であるBigQueryのデータセットとテーブルを指定します。
Amazon S3に格納したファイルの拡張子を選択します。
今回はcsvファイルを選択が、csv以外にもJSON(改行区切り)、CSV、Avro、Parquet、ORC を選択できます。
エラー通知も設定可能です。夜間等に設定した転送スケジュールが失敗してもメール等で検知することが出来ます。
以上でBigQuery Data Transfer Serviceの転送ジョブが作成されます。
転送ジョブを手動実行
スケジュールを設定した転送ジョブは、Webコンソールから手動実行が可能です。
今回はスケジュールで実行される前に手動でデータ転送を実行してみます。
手動実行後、すぐに転送ジョブが開始されデータのコピーが始まります。
転送ジョブが完了すると緑色のチェックマークが表示され、問題なくBigQuery Data Transfer ServiceでAmazon S3からBigQueryにデータの取り込みが出来ました。
大津 和幸 (記事一覧)
クラウドソリューション部
2022年4月にG-gen にジョイン。
前職まではAWSをはじめインフラ領域全般のなんでも屋。二刀流クラウドエンジニアを目指して、AWSのスキルをGoogle Cloudにマイグレーション中の日々。