HightouchのModelにdbt Modelを定義してみた

2023.07.31

さがらです。

Hightouchでは転送したいデータをModelとして定義しますが、dbtと連携してdbtのModelを定義することが可能です。

実際に試してみたので、本記事でその内容をまとめてみます。

事前準備

使用しているDWHをSourcesとして定義

dbtと連携するときは、HightouchのSourcesではなくExtensionsから定義します。

そのため、別途dbtでテーブルを生成しているDWHはSourcesとして定義が必要です。

私の場合は、実際にdbtでテーブルを生成しているDWHがSnowflakeだったので、HightouchのSourcesでSnowflakeを事前に定義しました。

dbtのリモートリポジトリを準備

HightouchでdbtのModelを定義するためには、dbtのコードを管理しているリモートリポジトリと連携する必要があります。

今回私はGitHubを使用しますが、事前にリモートリポジトリは準備しておきましょう。

(GitHubの場合)SSHキーかPersonal access tokenの準備

GitHubと連携する場合はSSHキーかPersonal access tokenが必要となります。事前に準備しておきましょう。

Extensionsでdbt用のリモートリポジトリを保持するGitサービスと連携

事前準備が終わったら、Hightouch上で設定をしていきましょう。

まず、画面左のメニューからExtensionsを押します。

続いて、dbt modelsを押します。

Configure extensionを押します。

Git credentialsSet upを押します。

Gitサービスを選択し、Credentialの情報を入れるポップアップが表示されます。必要な情報を入力し、Saveを押します。

対象のSourcesとdbtのリモートリポジトリを連携

続いて、事前に定義したSourcesと前工程で設定したdbt用のGitリモートリポジトリを紐づけます。

ExtensionsConfigurationタブから、連携したいSourcesを押します。

設定画面が出てくるので、順番に設定していきます。

まず、dbt Model Syncを有効化します。

Repositoryでどのリポジトリを使用するか選択し、Branchでどのブランチを使用するのか選択します。

dbt Versionは、参照先のリポジトリが使用しているdbtのバージョンを選択します。

Default schemaは、このSourcesとなっているデータベースにおいて、どのスキーマがdbtの出力先となっているかを入力します。出力先のスキーマを複数に分けている場合は、Hightouchで使用したいテーブル・ビューを持つスキーマを入力ください。

dbt project pathは、dbt_project.ymlのファイルパスを入力します。デフォルトから変えていなければ、./dbt_project.ymlと入力しましょう。

dbt Selectorはオプションですが、対象のdbt projectにおいて、Hightouch用のModelにTagを付けている場合は、tag:と入れると、対象のModelだけを表示することができます。

Custom targetはオプションですが、Hightouchからdbtが実行されるときはtarget nameがprodとなるため、任意のtarget nameにしたい場合は入力しましょう。

Custom environment variablesはオプションですが、任意の環境変数を指定したい場合は設定しましょう。

これらの設定が終わったら、右上のSaveを押します。

すると、Hightouchに対してdbtのModelを同期するため、Full resyncボタンが押せるようになるため、これを押します。同期中はFull resyncではなく読み込み中のアイコンが表示され、完了するとまたFull resyncが表示されます。私の場合は3分ほどかかりました。

これで、準備は完了です!

ModelsからdbtのModelを選択してみる

最後に、ちゃんとModelsからdbtのModelを選択できるかを確認してみます。

新しいModelの作成時に、Sourceはdbtのコードを保持するリモートリポジトリと連携したSourceを選択します。

その後、dbt modelを選択します。

dbtのModelが選択できるようになっていました!DescriptionやRepositoryのURLまでわかるのはありがたいですね。

あとは、通常通りModelとして設定してあげて、任意のDestinationにSyncさせればOKです!

最後に

HightouchのModelにdbt Modelを定義してみました。

Hightouchとdbtと連携については、他にも多くの機能があるためその機能も検証予定です!