背景・目的
クラウドデータ基盤のELTツールのdbtについて、特徴の整理と簡単な動作を確認してみます。
まとめ
- dbtは、SQLファーストのELTをツールです。
- dbtのアカウントは、下記の3種類あります。
- Developer
- Team
- Enterprise
概要
The analytics engineering workflow
dbt を使用すると、データ チームはウェアハウス内で直接作業して、レポート、ML モデリング、運用ワークフロー用の信頼できるデータセットを生成します。
What is dbt?
dbt は、モジュール性、移植性、CI/CD、ドキュメントなどのソフトウェア エンジニアリングのベスト プラクティスに従って、チームが分析コードを迅速かつ共同で展開できるようにする SQL ファーストの変換ワークフローです。
How dbt works
Version Control and CI/CD
開発環境を使用して安全にデプロイする。
Git 対応のバージョン管理により、コラボレーションと以前の状態への復帰が可能。
Test and Document
運用前にすべてのモデルをテストし、動的に生成されたドキュメントをすべてのデータ関係者と共有する。
Develop
モジュール形式のデータ変換を .sql または .py ファイルに書き込む。
依存関係管理の面倒な作業は dbt が処理する。
The new standard for data transformation
Develop faster
定型的な DDL/DML を、依存関係を推論し、テーブルとビューを構築し、モデルを順番に実行する単純な SQL SELECT ステートメントに置き換える。
Cloud IDE でマクロ、ref ステートメント、オートコンプリート コマンドを使用してコード自体を記述するコードを開発する。
Python パッケージを利用して、複雑な分析を高速化する。
Work from the same assumptions
自動生成された依存関係グラフと動的データ ディクショナリは、データ利用者の信頼と透明性を促進する。
Deploy with confidence
アプリ内スケジュール、ログ記録、アラート機能を使用して、変換ワークフローに可観測性を組み込む。ブランチ上の保護ポリシーにより、CI の実行ごとに生成される開発、ステージ、本番環境などの管理されたプロセスを通じてデータが確実に移動される。
Eliminate silos
データ サイエンス チームは、分析チームが構築したモデルと接続するモデルを、それぞれが好みの言語を使用して構築できるようになった。dbt は SQL または Python でのモデリングをサポートしており、分析コードを扱う全員が共有ワークスペースを利用できるようする。
Security
SOC-2 準拠、CI/CD 導入、RBAC、ELT アーキテクチャによりリスクを管理する。
Governance
バージョン管理、テスト、ロギング、アラートによりデータの疑いを排除する。スナップショットは時間の経過とともに変化し、ホストされているドキュメントへのオープン アクセスを提供する。
実践
Quickstart for dbt Cloud and Redshiftを参考に試します。
【dbt】 dbtアカウントの作成
まずは、dbtアカウントを作成します。
-
Start using dbt nowのページから、FreeのDeveloperでSign upします。
-
下記を入力し、「Create my account」をクリックします。
Developer Planを選択
DeveloperでSign upしてもデフォルトでは、TeamのPlanになるようです。
【AWS】Redshift環境を作成する。
こちらのCloudFormationを実行して環境を作成します。
CloudFormationを実行
【dbt】 dbtクラウドからRedshiftに接続
dbtクラウドでからRedshiftに接続します。
-
下記を入力し、「Test Connection」をクリックします。
【AWS】データの準備
S3にデータをアップロード
Redshift で使用するファイルをアップロードします。CloudFormationで作成されたS3バケットにファイルアップロードをします。
-
下記のファイルをダウンロードします。(このファイルは、dbtチュートリアルページから取得できます。)
Redshift でオブジェクトを作成
-
下記を入力し、「Create Connection」をクリックします。
-
下記のSQLを実行し、スキーマを作成します。
create schema if not exists jaffle_shop; create schema if not exists stripe;
-
下記のSQLを実行し、テーブルを作成します。
create table jaffle_shop.customers( id integer, first_name varchar(50), last_name varchar(50) ); create table jaffle_shop.orders( id integer, user_id integer, order_date date, status varchar(50), _etl_loaded_at timestamp default current_timestamp ); create table stripe.payment( id integer, orderid integer, paymentmethod varchar(50), status varchar(50), amount integer, created date, _batched_at timestamp default current_timestamp );
S3のデータをRedshiftにロード(コピー)
-
下記のSQLを実行し、Redshiftのテーブルにコピーします。
copy jaffle_shop.customers( id, first_name, last_name) from 's3://dbt-data-lake-xxxx/jaffle_shop_customers.csv' iam_role 'arn:aws:iam::XXXXXXXXXX:role/RoleName' region 'ap-northeast-1' delimiter ',' ignoreheader 1 acceptinvchars; copy jaffle_shop.orders(id, user_id, order_date, status) from 's3://dbt-data-lake-xxxx/jaffle_shop_orders.csv' iam_role 'arn:aws:iam::XXXXXXXXXX:role/RoleName' region 'ap-northeast-1' delimiter ',' ignoreheader 1 acceptinvchars; copy stripe.payment(id, orderid, paymentmethod, status, amount, created) from 's3://dbt-data-lake-xxxx/stripe_payments.csv' iam_role 'arn:aws:iam::XXXXXXXXXX:role/RoleName' region 'ap-northeast-1' delimiter ',' ignoreheader 1 Acceptinvchars;
-
下記のSQLを実行し、データを確認します。登録されています。
select * from jaffle_shop.customers; select * from jaffle_shop.orders; select * from stripe.payment;
【dbt】セットアップと疎通
リポジトリをセットアップ
dbt cloudでは、リポジトリを利用してコードをバージョン管理できます。
dbtプロジェクトの初期化
dbtリポジトリを初期化し、ファイルを追加します。
-
「initialize dbt project」をクリックします。
-
下記のコードを入力し、「Save As」をクリックします。
select * from jaffle_shop.customers
考察
今回は、dbtでアカウントを作成し、dbtからRedshiftへの接続を試してみました。次回以降は、複数のELTを作成しワークフローを構成してみたいと思います。
参考