Upgrade to Pro — share decks privately, control downloads, hide ads and more …

完全に理解した incremetal 〜そして、何もわからないへ〜

 完全に理解した incremetal 〜そして、何もわからないへ〜

ikeda-masashi

May 10, 2022
Tweet

More Decks by ikeda-masashi

Other Decks in Technology

Transcript

  1. {{ config(materialized=’incremental’) }} dbt Tokyo Meetup #3 5月10日(火曜日)11時〜12時            インクリメンタル https://developers.freee.co.jp/entry/understand-of-perfect-understandingより引用

    『完全に理解した』、 〜そして、『何もわからない』へ〜 通称:ダニング ⹀クルーガー曲線 面白法人 カヤック 池田将士 ※ちなみに正式名称は株式会社です
  2. 自己紹介 池田 将士 (@mashiike) 技術部 SREチーム所属 職能、肩書きetc… • (自称)データエンジニア •

    (仮称)アナリティクスエンジニア • SRE • サーバーサイドエンジニア Amazon S3 ※私のIconはS3バケットではありません
  3. アジェンダ 1. DBTとMaterialization 2. {{ config(materialized=’incremental’) }} 『完全に理解した』 a. 基本的な使い方

    b. ログ処理での例 3. {{ config(materialized=’incremental’) }}『なにもわからない』 a. カラムに変更が入ったら? b. 再処理したくなったら? c. upsertを実現するには? 4. incremental、それは... 今日のゴール
  4. DBTとMaterialization DBTには4つのMaterializationが標準搭載されています( Custom materializationを作ることも可能) • table:  SELECTの結果を物理テーブル として保存する • view:

     SELECTの結果を物理ビューと して保存する • ephemeral:  共通テーブル式(CTE)と して、他のモデルの実行時に埋め込ま れる
  5. DBTとMaterialization DBTには4つのMaterializationが標準搭載されています( Custom materializationを作ることも可能) • table:  SELECTの結果をDBテーブルと して保存する • view:

     SELECTの結果をDBビューと して保存する • incremental: なんかいい感じに 物理テーブルを更新してくれるやつ!!(雑) • ephemeral:  共通テーブル式(CTE)と して、他のモデルの実行時に埋め込ま れる
  6. つまり・・・ • 初回実行時は赤枠の中を描画しない で CREATE TABLE • 2回目以降は赤枠の中を描画して INSERT TABLE

    {{ config(materialized=’incremental’) }} とは 1つのモデルを、1つの物理テーブルとして実現し       継続的に更新し続けるものなり!
  7. 実例:ログの処理の例 schema.yml version: 2 sources: - name: log tables: -

    name: nginx_access_logs description: nginxのアクセスログ columns: - name: time description: アクセス時刻 - name: method description: リクエストメソッド - name: uri description: リクエストされた URI - name: protocol description: リクエストのプロトコル - name: status description: レスポンスステータスコード - name: vhost description: リクエストされたホスト名 - name: request_id description: リクエストID - name: partition_date description: ログ読み出しのパーティション • 初回実行時は全行ロード • 2回目以降は直近7日の未ロードのみ ※Redshift Spectrumを用いて読んでいて、 重複がなく、request_idで識別できることを想定した例です。
  8. 基本のmaterializationの4つ • table • view • ephemeral • incremental 物理テーブルや物理ビューを洗替する

    物理的なモノが存在しない 物理テーブルを継続して更新し、運用する
  9. 基本のmaterializationの4つ • table • view • ephemeral • incremental 物理テーブルや物理ビューを洗替する

    物理的なモノが存在しない 物理テーブルを継続して更新し、運用する 一つの物理テーブルの変更操作を、 1つのモデルに抽象化する 抽象化=ソフトウェア開発のベストプラクティスの一つ
  10. 基本のmaterializationの4つ • table • view • ephemeral • incremental 物理テーブルや物理ビューを洗替する

    物理的なモノが存在しない 物理テーブルを継続して更新し、運用する 一つの物理テーブルの変更操作を、 1つのモデルに抽象化する 抽象化=ソフトウェア分析のベストプラクティスの一つ incremental、それは・・・
  11. 基本のmaterializationの4つ • table • view • ephemeral • incremental 物理テーブルや物理ビューを洗替する

    物理的なモノが存在しない 物理テーブルを継続して更新し、運用する 一つの物理テーブルの変更操作を、 1つのモデルに抽象化する 抽象化=ソフトウェア分析のベストプラクティスの一つ incremental、それは・・・ Analytics Engineeringの真髄の一端だった。
  12. ネタ解説 dbt run の挙動は実は以下のような流れになってる dbt run parse (not execute) :

    DBTの.sqlや.ymlを読み込んだり ref()を解析したりする。 主な成果物として manifest.jsonができる runtime (execute) : 実際にDWHに実行するための .sqlファイルのレンダリング、そして実行する .sqlのレンダリング materializationのレンダリング+実行( DRY RUNで実際にはDWHには何も実行されない) .sqlのレンダリング materializationのレンダリング+実行
  13. ネタ解説 dbt run の挙動は実は以下のような流れになってる dbt run parse (not execute) :

    DBTの.sqlや.ymlを読み込んだり ref()を解析したりする。 主な成果物として manifest.jsonができる runtime (execute) : 実際にDWHに実行するための .sqlファイルのレンダリング、そして実行する .sqlのレンダリング materializationのレンダリング+実行( DRY RUNで実際にはDWHには何も実行されない) .sqlのレンダリング materializationのレンダリング+実行 configの中身が 書き換えられる のはこのだけ DWHにSQLが 実行できるの は、ここだけ
  14. ネタ解説 dbt run の挙動は実は以下のような流れになってる dbt run parse (not execute) :

    DBTの.sqlや.ymlを読み込んだり ref()を解析したりする。 主な成果物として manifest.jsonができる runtime (execute) : 実際にDWHに実行するための .sqlファイルのレンダリング、そして実行する .sqlのレンダリング materializationのレンダリング+実行( DRY RUNで実際にはDWHには何も実行されない) .sqlのレンダリング materializationのレンダリング+実行 configの中身が 書き換えられる のはこのだけ DWHにSQLが 実行できるの は、ここだけ Parseの段階で、DWH上に実際に物理テーブルの存在を確認することはできない macroを使わずに1ファイルでtableもどきを作るには、runtimeの.sqlのレンダリング段階 で、物理テーブルの rowをdeleteする必要。