Snowflake

dbt Projects on Snowflake使ってみた

こんにちは、中村です。

ついにdbt Projects on Snowflakeが使えるようになりましたね。

というわけで、今回は既存のdbtプロジェクトをSnowflake上で編集・実行する方法を解説します!

目次

dbt Projects on Snowflakeについて

公式ドキュメントによると、主な機能は以下の通り

  • Web画面(Workspaces)で開発:Git連携もでき、ファイルをブラウザ上で編集。
  • SQLやCLIでも実行可能EXECUTE DBT PROJECTsnow dbt run などで dbt コマンドをSnowflakeから実行。
  • バージョン管理付き:自動でバージョンを管理。切り替えも可能。
  • スケジュール実行OK:Snowflake Tasksで定期実行できる。
  • ログや実行履歴が見える:Snowsightでモニタリングできる。

個人的にはスケジュール実行できるのはほかのツールを入れなくて済むので、とてもありがたいですね。

dbt Projects on Snowflakeを使ってみた

先述の通り今回は既存プロジェクトをSnowflakeのワークスペースで実行する方法について解説していきます。

今回もSnowflake公式ハンズオンを参考にしていますが、今回の解説では、ハンズオン資料とは異なる既存のdbtプロジェクトを使用します。

準備

まずはSnowflakeのワークスペースが使えるようにしましょう。

以下をSQLワークシートで実行

ALTER USER ユーザー名 SET DEFAULT_SECONDARY_ROLES = ('ALL');

次にGitリポジトリを見るためのAPI統合と、dbt deps用に外部統合の設定をします。

API統合はGitHubからPATを取得してSECRETを作成します。

GitHubからPATを取得する方法
GitHubにサインイン後、右上の自分のアイコンをクリック、Setting → Developer Setting → Personal access tokens → Fine-grained tokensを選択、Generate new tokensから作成します。

公式ドキュメント


以下をSQLワークシートで実行

use role sysadmin;

--WH、データベース、スキーマを設定
use warehouse NAKAMURA_WH; 
create database NAKAMURA_DB;
create schema if not exists dbt_test;
use schema NAKAMURA_DB.dbt_test;

--API統合の設定(既存プロジェクトの編集用)
-- SECRETの作成
CREATE OR REPLACE SECRET RDTEAM.dbt_test.nakamura_git_secret
  TYPE = password
  USERNAME = 'Nakamura*****' --GitHubのユーザー名
  PASSWORD = 'github_pat_**********************************';  --作成したGitHubのPAT

-- API統合の作成
CREATE OR REPLACE API INTEGRATION git_api_integration_nakamura
  API_PROVIDER = git_https_api
  API_ALLOWED_PREFIXES = ('https://github.com/Nakamura*****')
  ALLOWED_AUTHENTICATION_SECRETS = (nakamura_git_secret)
  ENABLED = TRUE;

GRANT USAGE ON INTEGRATION git_api_integration_nakamura TO ROLE NAKAMURA;
CREATE EXTERNAL ACCESS INTEGRATION my_ext_access_integration
  ALLOWED_NETWORK_RULES = (my_network_rule)
  ALLOWED_AUTHENTICATION_SECRETS = (my_secret)
  ENABLED = TRUE;

--外部統合の設定(dbt deps用)
CREATE OR REPLACE NETWORK RULE NAKAMURA_DB.dbt_test.dbt_network_rule
  MODE = EGRESS
  TYPE = HOST_PORT
  VALUE_LIST = ('hub.getdbt.com', 'codeload.github.com');  --package.ymlに記載した外部パッケージのドメインを入力

CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION dbt_access_integration
  ALLOWED_NETWORK_RULES = (NAKAMURA_DB.dbt_test.dbt_network_rule)
  ENABLED = true;

GRANT USAGE ON INTEGRATION DBT_ACCESS_INTEGRATION TO ROLE NAKAMURA;

-- タスクを実行可能にする権限を付与(スケジュール実行用)
GRANT EXECUTE TASK ON ACCOUNT TO ROLE NAKAMURA;

また、今回僕はこちらのdbt公式リポジトリをフォークして使っています。手元に既存プロジェクトがない場合は、こちらを使えます。

実際に使ってみる

ワークスペース>ワークスペース名>ワークスペースの作成、Gitリポジトリからを選択

つづいて既存プロジェクトのリポジトリURLを入力し、先ほど作成したAPI統合を選択

プロジェクトが表示されましたね。

プロジェクトが表示されたら、まずはprofiles.ymlを作成しましょう。


既存プロジェクトの場合、Coreの場合ローカルの.dbt配下にあり、Cloudの場合SaaS自体で設定するので、プロジェクト内にはないはずです。

新規追加からprofiles.ymlを追加を選択

既存のprofiles.ymlをそのままコピペしましょう。

ここからは、コマンド実行をしていきます。

dbt Projects on SnowflakeはGUIでコマンドが実行できます!

各コマンドについて
・コンパイル
dbt形式(jinja形式)のSQLをコンパイルすることでリネージ(DAG)がわかる

・テスト
dbt testに相当
YAMLに書いたテストをすることができる

・依存関係
dbt depsに相当
外部パッケージを使っている場合、package.yamlに記載してdbt build/runの実行前にdbt depsをする必要がある

・表示
dbt showに相当

・リスト
dbt listに相当
dbt project内のリソースの一覧表示ができる

・実行
dbt runに相当
モデルを作成できる

・ビルド
dbt buildに相当
dbt seed/run/testを一括でできる

・シード
dbt seedに相当
seedsファイルにあるcsvをテーブル/ビュー化できる

・スナップショット
dbt snapshotに相当
時系列での履歴管理を目的としたテーブル(スナップショット)を作成・更新できる

・操作を実行
run-operationに相当
カスタムマクロ(macro)を実行するためのコマンド

プロジェクト内に外部パッケージを使用しているので、dbt depsを実行します。

実行に外部統合の選択が必要なので、先ほど作成した外部統合のdbt_access_integrationを選択して実行

次にコンパイルを実行します。

これでプロジェクト内のリネージを見ることができます。

続いてdbt buildをしていきます。

実行すると僕のプロジェクトでは下の様になりました。

ちなみに、dbt_project.ymlには以下の様に記載をしています。

テストの方も問題なくパスしているようですね。

無事実行できたのでデプロイしましょう!

右上の接続からdbtプロジェクトをデプロイを選択

デプロイするデータベースとスキーマを選択し、dbtプロジェクトの作成を選択、プロジェクト名を入力しましょう

これでデプロイ完了です。

スケジュールジョブの作成と実行

先ほどと同じように接続を選択し、スケジュールを作成を選択

スケジュールは毎時/毎日/毎週/毎月/カスタム(CRON形式)の中から選択できます。

コマンドは1つしか実行できないようなので、今回はbuildを選択しました。

スケジュールしたジョブの実行結果はモニタリング>dbtプロジェクトから確認できます

まとめ

今回は、既存のdbtプロジェクトを使って、dbt Projects on Snowflakeを実際に試してみました!

Snowflakeでもほかのエディター同様にdbtプロジェクトが使えるので、わざわざ画面を切り替える必要がなく、さくさく作業ができていいですね。

今回ご紹介したdbt Projects on Snowflakeと直接併用はできませんが、dbt Fusionや各種拡張機能も非常に便利です。今回の記事でdbtにも興味を持っていただけた方はぜひこちらの記事もご覧ください!

Cortex Analystを使ってみた前のページ

KARTEの「フレックスエディタ(β)」登場!ノーコードでここまでできる!次のページ

ピックアップ記事

  1. 最速で理解したい人のためのIT用語集

関連記事

  1. Snowflake

    Snowflake無料トライアルの始め方

    こんにちは、中村です。意外にも弊社ブログで記事がなかったので、今回は…

  2. Snowflake

    Snowflake Summit2023 振り返り

    1. はじめに6月26日~29日にラスベガスにて開催されたS…

  3. Cortex

    コンポーザブルCDPにおけるSnowflakeのマルチモーダルLLMの期待

    こんにちは、喜田です。本記事ではコンポーザブルCDPとは何か…

  4. Generative AI

    Snowflake の Copilot が優秀すぎる件について

    こんにちは、喜田です。いままでSnowflakeのライトユー…

  5. Snowflake

    第14回関西DB勉強会-Snowflake Summit参加報告-

    2024年6月22日、恒例の関西DB勉強会(第14回)に参加させてい…

  6. DBエンジニアが学ぶSnowflake

    【DBエンジニアが語るSnowflake】②このロールがすごい!!!

    こんにちは。喜田と申します。「DBエンジニアが学ぶSnowflake…

カテゴリ
最近の記事
  1. AWS発のAIエージェントIDE「Kiro」を使用した仕様駆…
  2. TableauとSnowflakeを接続する方法
  3. 【dbts25】Snowflake×PostgreSQLのニ…
  4. TROCCO dbt連携編
  5. KARTEの「フレックスエディタ(β)」登場!ノーコードでこ…
  1. Snowflake

    SnowflakeのHybrid Tableのマニュアルを読み解く
  2. Tableau

    DirectionAPI+Tableauでドライブ時間の可視化(後編)
  3. Mouseflow

    ヒートマップ活用法
  4. Mouseflow

    Mouseflow新機能その1 -レコーディングへのコメント機能
  5. Snowflake

    【速報】Snowflake Summit Builder Keynote 要約
PAGE TOP