
dbt CloudのCanvas機能を使ってGUIでデータ変換してみた
かわばたです。
dbt CloudのCanvasは、SQLコードを直接記述することなく、GUIを通じてデータ変換モデルを構築・編集できる機能です。ドラッグ&ドロップの直感的な操作でデータパイプラインを視覚的に組み立てることができ、幅広いユーザーによるdbtの活用が期待できます。
この記事では、dbt CloudのCanvas機能を基本的な使い方からデータ加工・GitHubのマージまで試していきます。
【公式ドキュメント】
対象読者
- dbt CloudのCanvas機能や基本的な操作について興味のある方
- SQLの学習コストを下げて、自身でデータマートを作りたい方
事前準備と検証環境
Canvasを試すには、いくつかの準備が必要です。
必要な環境
dbt Cloudのプラン: Canvas機能はEnterpriseプラン以上で利用可能です。
接続設定済みのデータウェアハウス: Snowflake, BigQuery, Redhift, Databricksなどのデータウェアハウスへの接続が完了している必要があります。かわばたはSnowflakeのトライアルアカウントEnterprise版で試しています。
サンプルプロジェクト: この記事では、生成AIで作成したダミーデータを例に進めますが、ご自身のプロジェクトでも問題ありません。
使用するデータ
使用データの概要は下記です。
顧客データ 25行
user_id | user_name | created_at |
---|---|---|
101 | 田中 太郎 | 2024-01-15 |
102 | 鈴木 花子 | 2024-02-20 |
103 | 佐藤 次郎 | 2024-03-10 |
104 | 高橋 三郎 | 2024-04-05 |
105 | 伊藤 四郎 | 2024-05-21 |
~~~ | ~~~ | ~~~ |
製品データ 25行
product_id | product_name | price |
---|---|---|
201 | リンゴ | 150 |
202 | バナナ | 100 |
203 | オレンジ | 120 |
204 | 牛乳 | 250 |
205 | パン | 180 |
~~~ | ~~~ | ~~~ |
注文データ 100行
order_id | user_id | product_id | quantity | order_date | status |
---|---|---|---|---|---|
3001 | 101 | 201 | 5 | 2024-06-01 | completed |
3002 | 102 | 204 | 1 | 2024-06-01 | completed |
3003 | 101 | 205 | 2 | 2024-06-02 | shipped |
3004 | 103 | 202 | 10 | 2024-06-03 | completed |
3005 | 104 | 203 | 3 | 2024-06-05 | shipped |
3006 | 102 | 201 | 2 | 2024-06-05 | pending |
3007 | 105 | 205 | 1 | 2024-06-08 | completed |
3008 | 101 | 204 | 1 | 2024-06-10 | pending |
~~~ | ~~~ | ~~~ | ~~~ | ~~~ | ~~~ |
Canvasでデータモデルを構築
それでは、実際にCanvasを使って新しいデータモデルを構築していきます。
今回は「製品ごとの売上金額」を集計するモデルを作成します。
Canvasへのアクセス方法
- dbt CloudのIDEを開き、左側のファイルエクスプローラーの上部にある
Canvas
ボタンをクリックすると、Canvasのインターフェースが起動します。
+Create new workspace
をクリックします。すると下記ワークスペースに遷移します。
番号 | 内容 |
---|---|
1 | メインメニュー(dbtロゴ)とワークスペースのタイトル。タイトルはデフォルトでランダムに設定されますが、クリックすることでいつでも編集できます。 |
2 | モデルタブ。モデル名はOutputオペレーターで設定できます。 |
3 | モデルアイコン。ワークスペースでモデルを管理します。 |
4 | Runsアイコン。警告やエラーなどの実行データが表示されます。 |
5 | プレビューアイコン。データのプレビューを表示します。 |
6 | 追加オプション。新しいモデルの作成、既存のモデル編集、シードファイルの追加が可能です。 |
7 | オペレーターツールバー。ワークスペースでモデルを作成するための構成要素が含まれています。 |
8 | Copilotアイコン。自然言語を使用してCanvasモデルを構築できます。 |
9 | SQLコードアイコン。モデルをコンパイルするSQLが表示されます。 |
10 | ソースタブ。ソースとなるEnvironmentを設定できます。 |
11 | Runアイコン。モデルに対してdbt run を実行します。 |
12 | Commitアイコン。プロジェクトに対してセットアップしたGitリポジトリにCommitを行う。 |
新しいモデルを作成
-
Inputの選択
まず、モデルの元となるテーブルを選択します。
オペレーターツールバーの「Input」セクションからModel Explorer
をワークスペースにドラッグ&ドロップします。
-
下記画面のようにinputとoutputを設定する画面が表示されます。inputの
Choose a model
をクリックします。
- モデル一覧が表示されるので、使用したいモデルを選択し
Select model
をクリックします。
ここでは赤枠で囲った3つのモデルをそれぞれ選択しますが、orders
から選択しています。
※余談ですが、description
でモデルの説明を書いてあると表記されるのは分かりやすくて良いですね!
同様の処理をproduct
,users
についても行い下記のようにソースとなるモデルを定義できました。
【小ネタ】
赤枠のアイコンをクリックするとコメントが記載できます。
赤枠のアイコンをクリックするとデータのプレビューを確認することが出来ます。
結合
次に、3つのテーブルを結合していきます。
1.「Transform」セクションからJoinオペレーターをドラッグし、ワークスペースにドロップします。
もしくは、赤枠のアイコンをクリックするとAdd operator
が表示されるのでjoinを選択しても問題ありません。
2.下記のようにjoinオペレーターをL側にorders
,R側にproduct
を紐づけます。
続いて、Combine inputs
をクリックします。
- すると下記項目が表示されるので
JoinType
と結合キー
を選択します。
今回はJoinType
はLeft
,結合キー
はProduct_ID
としました。
下記のように紐づけることが出来ました。
上記内容とusers
も同様に結合し下記のようになりました。
集計
次に、Product_ID
ごとに金額を集計します。
PRICE
カラムは存在しますが、QUANTITY
カラムも存在するので、合計の金額を新しくカラムとして追加したいです。そのため下記Formulaオペレーターをさきほど作成したJoinオペレーターに接続します。
-
Formulaオペレーターを下記のように設定します。
Expression
に計算式であるPRICE*QUANTITY
をいれAlias
にカラム名total_price
を記載しました。
-
続いて金額を算出するために、Aggregateオペレーターを接続します。
-
Configure aggregation
をクリックします。
-
下記画面が表示されるので、
Group by
の項目にPRODUCT_ID
とPRODUCT_NAME
を追加。Function
タブでSum
を選択。Column
タブで先ほど作成したtotal_price
を選択します。
生成されたSQLの確認
Canvasの素晴らしい点の一つが、GUIでの操作がリアルタイムでSQLコードに変換されることです。
各オペレーターを選択した状態で、設定パネルの「SQL」タブをクリックすると、その時点までに生成されたSQLを確認できます。これにより、「GUIの裏で、どのようなロジックが組まれているのか」が一目瞭然となり、エンジニアも安心して利用できます。
※試していて気づいたのですが、オペレーターでコメントを追加した箇所はSQL側にもコメントが反映されていて良いですね。より可読性が上がるので積極的にコメントを入れていきたいです。
モデルの保存と実行
最後に、「Output」セクションからOutputオペレーターをAggregateオペレーターの後に接続し、モデル名をProduct_id_total_price
などと設定します。
File path
はモデルを保存する場所を指しています。デフォルトではmodels/canvas
となっています。
実際に実行していきます。
右上部にあるRun
をクリックします。
画面下部に下記画面が表示され、成功していることが確認できました。
連携しているSnowflakeにも保存が確認できました。
GitHubへMerge
Canvasで作成したモデルをGitHubへMergeしていきます。
右上部にあるCreate a pull request
をクリックします。
GitHub画面へ遷移するので、通常通りレビューを行いMerge処理を行います。
GitHubのmainへ反映することが出来ました。
まとめ
dbt Cloud Canvasは、データエンジニアリングの専門知識の有無にかかわらず、より多くの人がデータ変換のプロセスに参加できるようにするツールであると思います。広く展開するためにも、権限回りやデータ基盤の整備がますます重要になってくると感じました。
ぜひ試してみてください!