dbt (data build tool) は、データパイプラインを構築するためのツールです。データの前処理(ELT)におけるTransform(変換)を担当し、SELECT文を記述するだけでデータウェアハウス内のデータを変換できます。
公式リンク:https://www.getdbt.com/
公式ドキュメント:https://docs.getdbt.com/docs/introduction
dbt の Packages とは、Python のライブラリのようなもので、コードをモジュール化して後で簡単に実装できるようにしたものです。dbt Package 自体は単体の dbt プロジェクトで、それぞれモデルとマクロを備えています。プロジェクトにパッケージをインストールすると、パッケージのモデルとマクロが、自分のプロジェクトの一部になります。
Packages は dbt Package Hub の中から必要なものを選んでインストールすることができます。代表的な Packages だと、dbt_utils や codegen があります。
例
dbt_utils.get_column_values() | 特定のリレーションの列の一意の値を配列として返します。 |
dbt_utils.get_relations_by_pattern() | 指定されたスキーマ名またはテーブル名のパターンに一致する関係のリストを返します。 |
dbt_utils.deduplicate() | モデル、ソース から重複行を削除するために必要な sql を返します。 |
codegen.generate_base_model() | ベース モデルの SQL を生成し、それをモデルに貼り付けることができます。 |
codegen.generate_model_yaml() | モデルのリストの YAML を生成し、これを schema.yml ファイルに貼り付けることができます。 |
今回は dbt Package Hub の中から dbt_snow_utils を使ってみようと思います。
まずはインストール。「dbt_project.yml」 と同じ階層に 「packages.yml」 を作成して、以下のように記述します。
保存して、コンソールで "dbt deps" コマンドを実行してインストール完了です。パッケージをいくつも追加したい場合もこのファイル内に続けて "- package: ~" と、追加したいパッケージを続けて記述して実行すればOKです。
dbt_snow_utils に機能はいくつかありますが、CLONEマクロとDELETEマクロを使用してみたいと思います。
このマクロは、テーブルを宛先のデータベース、スキーマに複製します。引数は以下。
今回は以下の 「ST_POST」 テーブルを複製しようと思います。
宛先はあらかじめ準備した以下のテーブル。中身は空です。
実行コマンドと引数をコンソールに入力して実行。引数多い・・・。
Snowflakeを確認するとデータが入っていました。
Query History で実行されたクエリを確認すると、CREATE TABLE されているので、あらかじめテーブルを作る必要もないですね。
存在しないテーブルを宛先に指定して実行。
Snowflakeにはちゃんとテーブル作成されていました。
次にオプションの引数を消して実行してみます。
dbt でデフォルトで設定しているデータベースとスキーマにテーブルが作成されました。
このマクロはWhere句に基づいてテーブルからデータを削除します。引数は以下。
引数
今回は先ほど作成した以下の 「FT_POST_DBT」 テーブルからデータを削除してみようと思います。
先ほどと同様に、実行コマンドと引数をコンソールに入力して実行。
データを確認すると "code=3" のレコードが削除されていました。
Query History を確認すると、ちゃんとDELETE文が実行されていました。
今回は dbt Packages の中から dbt_snow_utils のパッケージを使用してみました。似たようなパッケージで snowflake_utils や データマスキングのための dbt_snow_mask など、他にも様々なパッケージがあります。使ってみたらまた記事にしようと思います。