BigQuery Data Transfer Service で AWS S3 から BigQuery に CSV データをロードしてみた

2019.11.12

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

こんにちは、みかみです。

GCP & BigQuery 勉強中です。

まだベータ版とのことですが、BigQuery Data Transfer Service を使って、GUI 操作で AWS S3 から BigQuery にデータをロードできるらしい!

なんか簡単そうじゃない? ということで。

やりたいこと

  • S3 に置いてある CSV データを BigQuery にロードしたい
  • BigQuery Data Transfer Service で簡単に(?)ロードしたい

やってみた

AWS側の準備

BigQuery にデータ転送するためには、データを置いてある S3 にアクセスするためのアクセスキーとシークレットアクセスキーが必要です。

AmazonS3FullAccess 権限のあるIAMユーザーで、アクセスキーとシークレットアクセスキーを取得しました。

データ配置するS3を作成して、下記のサイトからいただいてきた、都道府県コードのCSVファイル(UTF8)を配置。

GCP側の準備

BigQuery Data Transfer Service APIを有効に設定

GCP コンソールのナビゲーションパネル「APIとサービス」の「ライブラリ」をクリック。

検索バーに「BigQuery Data Transfer Service API」と入力してHITした結果をクリック。

BigQuery Data Transfer Service API 画面で「有効にする」ボタンをクリック。

BigQuery Data Transfer Service API が使えるようになったようです。

BigQuery のデータセットとテーブルを作成

BigQuery コンソールで、S3 データの転送先になるデータセットとテーブルを作成します。

「データセットを作成」ボタンをクリックしたら「データセットID」に test_s3 を入力。「データのロケーション」プルダウンで「東京(asia-northeast1)」を選択して「データセットを作成」ボタンをクリック。

作成したデータセットを選択したら、続いて「テーブルを作成」ボタンをクリック。

「テーブル名」pref とテーブルスキーマを入力して「テーブル作成」ボタンをクリックして、空のテーブルを作成しました。

BigQuery にデータを転送

BigQuery コンソールナビケーションの「転送」メニューをクリックすると、データ転送画面に遷移します。

「転送を作成」からデータソース選択画面で「Amazon S3」を選択。「転送構成名」に任意の文字列を入力。

「宛先データセット」で先ほど作成したデータセット test_s3 を選択。

「データソースの詳細」では「Destination table」に新規作成した空テーブル pref を入力し、「Amazon S3 URL」と「Access Key ID」、「Secret access key」も入力します。

S3 にアップロードしたファイルにはヘッダ行が含まれているので、「Header rows to skip」を 1 に変更したら「保存」をクリック。

すると、データ転送が始まります。

なお、初回実行時のみ GCP アカウント選択ポップアップと BigQuery Data Transfer Service の BigQuery へのアクセス許可ポップアップが表示されました。

1分ほどで完了表示に変わりました。

テーブルデータ確認してみると・・・

あれ?入ってない。。

転送ログを見てみたら、「No files found matching S3 source path...」のメッセージが。。

ファイルが見つからないといわれてます。。

が、AWS CLI で S3 にアップロードしたファイル確認してみたらちゃんと見える。。 パスがおかしいわけではなさそう。

CSV ファイルフォーマットの問題? GCP の権限まわりの問題? と試したあげく、結局、ブラウザのポップアップ許可できていなかったことが原因でした。。

従来の BigQuery ウェブ UI を使用して転送を作成する場合は、権限ウィンドウが表示されるように、bigquery.cloud.google.com からのポップアップを許可します。転送を成功させるには、BigQuery Data Transfer Service 権限でデータを管理できるようにする必要があります。

ポップアップ許可設定値化して、もう一度転送実行してみると、今度はちゃんとデータロードできました!

まとめ(所感)

今回自分は、若干しょーもないとこ(ブラウザのポップアップ設定。。)で引っかかりましたが、ちゃんとドキュメント通りに実行すれば簡単にデータ転送できるはず!

現在はまだ、逆の BigQuery からのデータ転送はできないとのことですが、S3 をはじめとするベータ版の対応ソースも多いですし、今後のさらなるバージョンアップに期待です。

クラウドサービスの枠にもとらわれず、いろいろなデータソースをシームレスに使えるツール、ユーザーとしてはうれしい限りです! 用途に合わせて Redshift と BigQuery の併用なんて選択肢もありかも(?)と思いました。