見出し画像

Fivetran をつかった Shopify → BQ 連携と注意点

※2023年1月11日に配信したmediumの記事の転載です

こんにちは!カウシェで ML Engineer をしている白川 達也(tatsuya)です。

機械学習をするために商品データを取得しようとしたら Shopify → スプシ → BigQuery という構成で商品情報が参照されており、この連携部分がとても不安定だったので、Fivetran を導入して安定化させてみました。その中で、Fivetran をつかった連携において注意したほうがいい点なども見えてきたので、共有できればと思います。

Fivetran、すばらしいサービスですね!一気にファンになりました。

Fivetran 導入以前の Shopify → BigQuery 連携

カウシェでは商品の管理に Shopify を用いています。データ分析などは基本的にすべて BigQuery 上で行われており、Shopify 上に蓄積されているデータも BigQuery へ連携されています。この連携ですが、下記のような構成で行われていました。

これまでの連携方法

しかし、カウシェに出品される商品点数が増加するに従い、この構成だと、

  • Shopify からスプシへ GAS でデータ取得している部分でしばしばデータ取得に失敗する

  • BigQuery からスプシを参照する部分が非常に低速

という問題が発生し、商品データを用いてデータ分析や機械学習をする上での障害となっていました。

Fivetranの導入

そこで Fivetran を導入し、Shopify → BigQuery のデータ連携を安定化させることにしました。

Fivetran は外部データソースごとに定義された Connector を用いて目的の Data Warehouse、DB など(Destination)へデータを Extract & Load するためのサービスです。Connector、Destination ともにあらかたのサービス・DB などは揃っていそうです。

今回 Fivetran を用いて Shopify → BigQuery への連携をする際には、下記の記事を大いに参考にしました。基本的にはボタンをポチポチしながら必要なフォームを埋めていく感じなので、慣れれば本当に簡単に連携ができます。

Fivetran を用いた Shopify → BigQuery 連携は大雑把には下記のような手順になります。

  1. Destination として BigQuery を指定。この際、Fivetran にサービスアカウント(Fivetran 側で自動で生成してくれます)などを通じて BigQuery への書き込み権限を付与する必要があります。

  2. Connector として Shopify を指定。この際、Shopify へのアクセス権限が必要なため、Shopify 上で十分な権限(後述します)をもった Private App を作成し、その App のAPI access token を取得しておく必要があります。

  3. 連携するデータを指定する際には、後から schema を変更し、連携するデータを選びます。同じく連携する間隔(プランによって選べるものが異なりますが 5 分、1 時間など)も設定します。

Shopify、BigQuery、Fivetran と 3 つのサービスをまたぐので、権限管理が分散しているとちょっと面倒かもしれません。

いずれも上で紹介した記事に具体的な方法が書いてあるので、詳細はそちらに譲るとして、この記事では実際に Fivetran で Shopify → BigQuery 連携をするにあたって躓いたポイントや留意点を中心に紹介したいと思います。

いまのところ、Fivetran で連携することにして大正解でした。安定性・スケーラビリティなど何も気にすることなく、自分たちで連携を構築・運用するよりずっと手軽かつ安価に運用できています。

どのプランにすべきか

本記事執筆時点では現状 4 種のプランがあります。

Fivetran の pricing (https://www.fivetran.com/pricing)

Fivetran の使用料金は、MAR(Monthly Active Rows)という月あたりに追加・更新・削除されたデータレコード数(Destination 側での累計データ更新行数です)に応じた月額の従量課金制になっています。使えば使うほど、MARあたりの単価が安くなる設計になっており、MAR がわかれば料金が決まるという仕組みです。本記事執筆時点では 1 M MAR(1 ヶ月あたり 100 万行のデータ追加・更新・削除)あたり $500 という設定でした。

MARあたりの単価 (https://www.fivetran.com/pricing)

そのため料金を見積もるために知らねばならないのは、データ連携するとどれくらいの MAR になるかなのですが、MAR の見積もりは連携開始から 1 週間たたないと計算されない仕組みになっており、14 日間の trial 中に早々に連携しておかないと期間中に MAR がわからないという事態になります(trial が終了してからもダッシュボード上で確認はできそうですが)。自分の場合、年末年始を挟んで連携などしていたのでちょっと困りました。

なお、使用料金が MAR に比例するため、更新頻度が高いデータを連携しようとすると必然的に課金額が増えていきます。そのためカウシェでも、更新頻度が激しすぎないデータを中心に連携をすることで様子を見ながら small start させています。E−commerce なのもあって年末年始は特別なシーズンではあるのですが、今のところいい感じです。連携するデータはあとから自由に再設定できます。

Google Marketplaceでの課金

カウシェでは各種サービスの課金を Google Marketplace へなるべく統合しています。Fivetran も Google Marketplace に対応しているので、必要であればそちらで課金をしたほうが良いでしょう。

Fivetran ではなく Fivetran Data Pipelines という名前になっていたので、一瞬これでいいのかと思ってしまいましたが、これで良いようです。

Terraform を使った構成管理もできるらしいが…?

Fivetran には Terraform の公式 Provider があり、Terraform での構成管理もできるようです。カウシェも基本的には可能な限りすべてのサービスを Terraform で管理しているため、当初はTerraform を使って構成管理をしようと考えたのですが、以下の観点からひとまずは Web 上での設定からスタートすることにしました(あとから移行できるようにすべてのステップでスクリーンショットをとり、トレースできるようにはしてあります)。

  • 公式 Provider は、どうやら REST API の仕様と Terrafrom での記述を対応させて作っているようで、Providerのドキュメントの先頭の部分にREST API を見るようにとの記載があります。ただ、Terraform での構成管理を実際に行ったブログ記事などもすぐには見つからず、REST API の記述を Terraform の設定としてどう転記すればいいのかを含めてトライアル期間中にちゃんと調査・検証しきるのは大変そうでした。

  • Terraform で構成管理をしようとすると、REST API が使える Standard 以上のプランにする必要があり、MAR あたりの料金が 1.5 倍ほどになります。Terraform での管理のために 1.5 倍の料金を払うのは気が引けました(こちらのほうがメイン)。

いずれは Terraform 管理に移行したいので、もし Terraform での管理に成功されている方がいれば、ぜひ記事を書いていただけると嬉しいです!

データ連携先の BigQuery データセット名を指定したい

Connectorを設定する際に、Destination schema という項目があるのですが、これが Big Query のデータセット名に対応するようです。

Destination schema が BigQuery のデータセット名になる

どのデータを連携するか

Fivetran ではどのデータを連携するかを指定できます。

連携するデータをチェックする

ただし、注意点として、同時に連携させねばならないデータのセットが存在します。そのようなデータは一括で指定をする必要があります(図中の product 〜 product_variant などがそれです)。

前述の MAR も連携元ではなく実はこの連携先のデータに対してカウントされるので、単一のデータでも分割されるとそれに応じて料金は膨らむことがありえます。なので、実際にどれくらいのボリュームになるかはデータ単位で事前に見積もっておいたほうが良さそうです。

また、先述の通り、更新頻度が高いデータを連携すると MAR が膨らみやすいので、small start するのであればその点も注意が必要です。

なお、ここでのデータ連携先の指定は、Shopify Private App に対して許可するデータアクセスのパーミッションと連動しているようです。ドキュメントには見つからなかったのですが、例えば商品データ(product 〜 product_variant)のみを指定して連携するのであれば、Private App に付与するアクセスパーミッションは read_products だけで良いようです。その他のパーミッションは下記をご覧ください(ただし、ドキュメントには必要なパーミッションのみ付与すれば OK とは書いていませんでした)。

おわりに

注意点を中心にご紹介してしまったので Fivetran は難しいサービスなのではと思わせてしまったかも知れませんが、自分が試した限りでは上記の項目くらいだけ注意しておけばあとは本当に簡単に連携ができました。従量課金制で small start もしやすいのでおすすめです。

最後に宣伝です。カウシェでは、データの連携や管理、活用などを担っていただける Data Engineer の他、データサイエンティストや機械学習エンジニアを募集しています。新しい技術を使いながら EC 業界に新しい体験を作っていくことにご興味を持っていただけた方はぜひお話させてください。ご感想含め、Twitter @s_tat1204YouTrust などでのお声がけもお待ちしています。


この記事が気に入ったらサポートをしてみませんか?