Reverse ETLサービス「Hightouch」をSnowflake Partner Connectから試してみた #SnowflakeDB

2022.06.27

さがらです。

つい先日、SnowflakeのPartner ConnectからReverse ETLのサービスの1つであるHightouchが使えるようになりました。

本記事ではSnowflakeのPartner ConnectからHightouchのセットアップをした上で、1つ例としてSnowflakeのデータをGoogleスプレッドシートへReverse ETLする際の内容をまとめてみます。

Hightouchとは

まず、HightouchはReverse ETLと呼ばれるサービスの1つです。

※最近Reverse ETLのことを「Data Activation」と呼ぶ動きもあるようですが、各サービスごとに主張する表記が異なっている気がするので、本日時点で一番広く認識されていると感じる「Reverse ETL」で本記事は書かせて頂きます。(同じ類いのサービスであるCensusは「Operational Analytics」と言ってますし…)

Reverse ETLとは一言で表すと、「SnowflakeなどのDWHに存在するデータをSalesforceやZendeskなど各種アプリケーションに出力・連携する」ことを意味します。

最近は何かしらのデータを用いるアプリケーションも多くなってきており、「このアプリケーションに、DWHに溜まっているデータを活用したい」という用途も増えて生まれたサービスなのだろう、と感じています。

肝心の連携先となるアプリケーションは、下記URLにまとまっております。日本でも馴染みがあると感じたところでは、Salesforce、Marketo、Zendesk、Notion、Slack、などが挙げられますね。

またReverse ETLに関しては、類似サービスのCensusの記事がすでにありますので、こちらもぜひ併せてご覧ください。

SnowflakeのPartner ConnectからHightouchに接続

では早速、SnowflakeのPartner ConnectからHightouchに接続してみます!

Snowsightの画面から、左の「Admin」➟「Partner Connect」を押します。

「Hightouch」を検索し、押します。

下記画像のようなポップアップが出てきます。自動で必要となるSnowflakeのオブジェクトを作成してくれます。

ここでのポイントは、「Optional Grant」というオプションを開いて、Hightouchに連携させたいデータを保持するデータベースを指定しておきましょう。ここでデータベースを指定しておけば、後で使用するロールに対してデータベースの閲覧権限付与の作業が不要となります。

設定が終わったら、右下の「Connect」を押します。

すると、下図のようにHightouchのアカウント作成が完了したことを表す画面が出てきます。右下の「Activate」を押して、Hightouchの画面に移動します。

下図のようにHightouchの画面に切り替わりますので、任意の方法でサインインしましょう。(私はGoogleアカウントを用いたSSOを使用しました。)

利用規約と、SnowflakeのデータをHightouchが見ることに関するチェックボックスが出てきます。どちらにもチェックを付けて、Continueを押します。

「Workspace name」の入力と「Region」を選択する欄が出てきます。それぞれ入力して選択した上で、「Create」を押します。

これで、一通りのセットアップ手順は完了です!「Go to workspace」を押すと、対象のSnowflakeからどのアプリケーションに連携を行うか設定を行うことが出来るWorkspaceに移動します。

例外作業:SnowflakeのSource設定変更

このままDestinationの設定へ…と行きたかったのですが、この後の工程でSnowflakeへの認証が上手くいかず、つまずきました。

この原因としては、Partner Connectにより自動で作られたSnowflakeへの接続情報(Source)を見てみると、Accountという設定項目に不要なsnowflakecomputing.comまで記述されていました。

この問題は2022年6月27日にHightouch社に連絡しましたが、いつ直るかは連絡を頂いていないため、この問題の解決方法だけ本記事で記しておきます。

画面左のメニューバーから、「Sources」を押します。

Partner Connectにより自動で作られたSourceを開きます。

この設定項目の中のAccountを見ると、snowflakecomputing.comまで記述されています。これではエラーを起こしますので、下図のように修正します。

  • 設定変更前

  • 設定変更後

この設定変更後、右上の「Test Connection」を押してCONNECTEDと表示されたら、「Save Changes」を押します。

GoogleスプレッドシートへReverse ETLしてみる

セットアップも終わったので、1つ試しにSnowflakeのデータをGoogleスプレッドシートへ連携してみます!

左のメニューバーの中から「Setup」を押し、「Select Destination」を押します。

左上の検索欄で「Google Sheets」と入れると、2つ候補が出てきます。 「Google Sheets」がOAuth認証で、「Google Sheets (Service Account)」がHightouchが発行するサービスアカウントに対して権限を付与する方法です。

今回は「Google Sheets (Service Account)」で進めてみます。選択した上で、右上の「Select」を押します。

またSetupの画面に戻るので、今度はSourceとDestinationの間にある「Create your first sync」を押します。

すると、下図のようにSyncの設定画面になります。まずはSnowflakeからどんなデータを抽出するかをModelとして定義するため、「Set up Model」を押します。

抽出するデータの定義方法の候補が出てきます。今回は「SQL Editor」を選択してみます。(dbtやLookerも指定できるようなので、いつか試したい…)

SQLを記述できるEditorが出てきます。今回はハンズオンでも使用するCitibikeのデータを用いて、年月別の利用者数を出すクエリを入れてみます。

ちなみに、右上の「Beautify」を押すと、記述したクエリをHightouch内のルールに沿って整えてくれます。関数名が小文字から大文字になったりしてますね。

クエリを書き終えたら、正しくデータを取れているか、右上の「Preview」を押します。すると、クエリにより取得できるデータが画面下部に表示されます。

Previewでデータを確認したら、右上の「Continue」を押します。

このModelの名前などを入れる画面に切り替わります。NameSlugPrimary Keyの3つを設定します。Slugについては、通常Nameに入れた内容で自動入力されますが自分でも変更可能です。

その後で、右上のFinishを押せば、Modelの設定は完了です。

続いて、DestinationにあたるGoogleスプレッドシートの設定をしていきます。下図赤枠の部分を押して設定画面に移動します。

今回選択した接続方法は「Google Sheets (Service Account)」なので、Hightouchが発行するサービスアカウントに対して権限を付与していきます。

「Generate service account」を押すと、少し画面が切り替わり、サービスアカウントが作られます(この後の工程でHightouchのサービスアカウントのメールアドレスは表示されます)。

右上の「Continue」を押して、次の画面に切り替えます。

Destinationについても名前をなどを入れる必要があります。NameSlugを設定します。

続いて、作成されたサービスアカウントに対して、出力先のスプレッドシートへの「編集者」権限を付与します。

作成されたサービスアカウントのアドレスをコピーします。

出力先のスプレッドシートに対して、「編集者」権限を付与します。

設定が終わったら、右上の「Finish」を押します。

最後の設定として、SnowflakeのデータをスプレッドシートにSyncさせる設定をしていきます。

メニューバーの「Setup」を押し、画面中央の「Configure sync」を押します。

まず出力先がスプレッドシートの場合は、どのように出力したデータをアップデートしていくのか設定できるようです。ここでは、対象のシートで都度データを書き換えていく「Mirror」を選択します。

続いて、スプレッドシートのどのシートに対して出力を行うのか設定します。

サービスアカウントの設定が無事にできていれば、ドロップダウンリストを押すとスプレッドシートのファイル名が出てくるはずなので、そのファイル名をクリックします。

次に、出力先のシート名を選択します。

ここでは設定しませんが、出力先の範囲指定などの設定も可能なようです。

出力先のシートの設定が終わったら、右上の「Continue」を押します。

最後に、同期の頻度とSlugの設定画面が出てきます。今回は設定しませんが、「Interval」の場合、「n分ごと」のように同期できるようです。

同期頻度とSlugの設定も完了したら、右上の「Finish」を押します。

これで、Setup完了です!(ポップアップ上で紙吹雪が舞いましたw)

早速、「Run this sync now」を押して、同期してみます。

すると、Syncのステータス画面に移動します。数秒後、STATUS欄が「HEALTHY」となれば同期完了です。

この後で対象のスプレッドシートを見ると、無事にSnowflakeから出力したデータが反映されていました!

出力範囲の指定も出来るので、スプレッドシートにSnowflakeのデータを反映したい場合には良さそうですね。

最後に

Reverse ETLのサービスであるHightouchを、SnowflakeのPartner Connectから試してみました。

今回はSnowflake➟Googleスプレッドシートへの連携を試してみましたが、こういったReverse ETLのサービスを使わないと自前でプログラムを記述する必要があると思います。 しかし本記事でまとめた通り、GUIベースの簡単な操作で連携をすることができました。

DWH上に溜まったデータを、DWHの外のアプリケーションで使用したいというユースケースは今後も増えていくと思うので、期待のサービスの1つですね。

またHightouchの特徴として、dbtやLookerなどいわゆるModern Data Stackのサービスとの連携機能も備わっています、こういった機能も試していきたいですね!(いつかブログに書くはず…ですw)