search
LoginSignup
0

More than 1 year has passed since last update.

Organization

SnowflakeからBigQueryにデータを移動する

この記事は何?

BigQuery Advent Calendar 2021 の5日目の記事です。
普段使ってるBigQueryとSnowflakeでデータを移動させる方法のうち、Snowflake => BigQuery の回です。

全体の流れ

全体の流れはシンプルです。

  1. バケット準備:GCPでGCSにバケットとデータを置くパスを切っておきます
  2. ストレージ統合作成:Snowflakeでストレージ統合を作ります
  3. IAMロール作成:GCP上でIAMロールを作ってパーミッションを与えます
  4. IAMロール割当:Snowflakeのストレージ統合で作られたサービスアカウントにIAMロールを割り当てます
  5. Snowflakeからアンドロード:Snowflakeから COPY INTO <場所> を使って、GCSにデータをアンロードします
  6. BigQueryで読み込み:BigQueryでGCSの該当パスを外部テーブルに指定して、SELECTします
  7. 完了

どうでしょうかんたんでしょ?
しかも一度ストレージ統合を作ってしまえば、配下のパスに好きにデータをアンロードできるので、BigQueryでも読ませ放題ですね。

バケット準備

特に言うことはありませんが、バケットとパスを作りましょう。
このあたりを読んで好きな方法で作成しましょう。

ストレージ統合作成

Snowflakeへログインして、ストレージ統合を作りましょう。
ドキュメントはこちらです

使うSQLはこんな感じです。

CREATE STORAGE INTEGRATION gcs_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = GCS
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('gcs://hogehogehoge/from-snowflake/')
;

ストレージ統合ができたら、 DESC STORAGE INTEGRATION で割り当てられた、サービスアカウントを確認しておきましょう。
STORAGE_GCP_SERVICE_ACCOUNT のところに書かれています。

IAMロール作成:

次にGCSにアクセスできるようにIAMロールを作成します。
必要な権限は下記になります。

  • storage.buckets.get
  • storage.objects.create
  • storage.objects.delete
  • storage.objects.get
  • storage.objects.list

GCPのIAMの管理画面からポチポチ作成しましょう。

詳細はこのあたりの手順を参考にしてください。

IAMロール割当

次はストレージ統合で割り当てられたサービスアカウントに、今作ったIAMロールを割り当てます。
作業は引き続きGCPのIAMの管理画面からポチポチで行えるはずです。
詳細はこのあたりの手順を参考にしてください。

Snowflakeからアンドロード

次はついにSnowflakeからデータをアンロードします。
データのアンロードには COPY INTO <場所> を使います。
このとき <場所> には gcs://バケット名/パス名/ を指定します。

オプションを含めて指定すると下記のようなSQLになります。

copy into 'gcs://mybucket/unload/'
  from <テーブル名やSELECT>
  storage_integration = <ストレージ統合名>;

メチャクチャ簡単ですね。

BigQueryで読み込み

最後はBigQueryで外部テーブルとして読み込んだら完了です。

このあたりの手順を参考に作ってみましょう。

最後に

だいたい慣れてくると10分くらいで作業できるようになります。
これでお客様に「SnowflakeのこのデータをBigQueryに読み込ませてほしいんですが、どれくらいかかりますか?」を「10分!!!」と答えられるようになりますね!

ちなみに、GCSにデータを置きっぱなしにすれば、Snowflakeからも外部テーブルとしてクエリできるようになっていますので、捗るかもしれません。
また、アンロードする時にHive形式のパーティションに則ったパスでアンロードすれば、BigQuery側もパーティションとして読み取れるので効率が良さそうです。

ちなみにGCSはアップロードが無料だったと思うので、費用的にはアンロードにかかったSnowflakeのウェアハウス消費クレジットと、AWSからGCSへのアウトバウンドの通信費だけです。
お安そうですね。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0