FivetranのSnowflake Connectorを使ってSnowflake上のデータをBigQueryにロードしてみた

2023.04.18

さがらです。

基本的にFivetranは、SnowflakeやBigQueryなどのDWHをDestinationとして設定し、Connectorを設定したデータソースのデータをDWHにロードする事ができるサービスです。

ただ、2023年4月18日時点ではSnowflakeをConnectorとして設定できる機能がPreviewとして提供されております。(実はBigQuery Connectorもあり、こちらは2023年4月18日時点でPrivate Previewです)

今回、このSnowflake Connectorを試してみたので、その内容を本記事でまとめてみます。

試してみた

今回、Snowflake Connectorを用いて、Snowflake上のテーブルをBigQueryに同期させるということを行ってみます。BigQuery特有のBQMLやVertexAI周りを活用したい場合には起こりうるケースかと思います。

Snowflake Connectorの設定

まず、FivetranのConnectorsから、右上のAdd connectorを押します。

宛先となるDestinationを選択します。ここでは、事前に作成していたBigQueryのDestinationを選択します。

Snowflake Connectorを選択します。

接続したいSnowflakeの認証情報を入れる画面が出てきます。ここでは特徴的な項目であるDestination schema prefixについて説明します。

Destination schema prefix:連携元のSnowflakeのデータベース上のスキーマをそのまま移行してしまうと、Snowflakeから同期したスキーマであることがわからなくなってしまうため、それを回避するためのパラメータです。デフォルトではsnowflake_dbと入っており、この設定のまま同期すると連携元のデータベース上のスキーマ名と併せてsnowflake_db_という名称でスキーマが登録されます。

また、使用するウェアハウスの項目がありませんが、認証に使用したユーザーのデフォルトウェアハウスが使われます。この点だけご注意ください。※ウェアハウスを指定できないのは正直つらいです…この件については該当するFeature RequestがあったのでUpvoteしておきました。

入力が終わったら、一番下のSave & Testを押します。

対象のSnowflakeアカウントに対して接続のテストが行われます。問題なければ、Continueを押します。

すると、Snowflake上のスキーマを解析するプロセスが走ります。

無事にスキーマの解析が終わると、どのスキーマ・テーブル・カラムを同期するのか選択する画面が出てきます。通常の同期と同じく、カラムごとにハッシュ化も可能です。

ここではSnowflakeのハンズオンでもよく使うCitibikeのデータを保持しているスキーマとテーブルを対象にしてみます。同期対象を選択したら、右下のSave & Continuteを押します。

同期元のテーブルの構成が変わったらどうするか、オプションが出てきます。ここでは全ての変更を検知して反映させるAllow allを選択しておきます。

これでコネクタの設定は完了です!

実際に実行してみた

コネクタの設定は終わりましたので、早速同期してみます。

前述の設定を終えたら自動でコネクタの設定画面に移動していると思いますが、StatusタブからStart Initial Syncを押して初回同期を行います。

今回、6150万行でSnowflakeの圧縮後で1.9GBのTRIPSテーブルを同期したのですが、XSのシングルクラスタのウェアハウスで、約70分ロード処理に時間がかかりました。(XSのウェアハウスが動いたのは最初の10~20分くらいで、残りの時間は全てBigQuery上のロード処理です)

※他にも5.8万行のWEATHERテーブルと参照するViewも同期していますが、こちらは数分で終わっていました。

実際にBigQueryを見てみると、無事に同期は出来ていました!

TRIPSテーブルは、下図のように型がBigQueryに合わせた形で変換されてロードされていました。

  • SnowflakeでのTRIPSテーブル

  • Fivetranで同期後の、BigQueryでのTRIPSテーブル

1つ気になった点は、SnowflakeでVARIANT型で定義していたカラムは、BigQueryではSTRING型として扱われていました。ここはBigQueryのJSON型でロードされると嬉しいですね、今後に期待です!

  • SnowflakeでのWEATHERテーブル

  • Fivetranで同期後の、BigQueryでのWEATHERテーブル

最後に

FivetranのSnowflake Connectorを試してみました。

いろいろな事情で複数のDWH/DBを運用しないといけないケースはあると思いますので、そんなときにFivetranを使うとすぐにSnowflakeのデータを別のDWHに同期できるのは便利だと感じました!

一方、このコネクタを使うと多くのコンピュートリソースが必要な処理となる場合が多いと思うので、Snowflakeもロード先のDWH/DBも、必要なリソースを確保した上で運用しましょう!