iT邦幫忙

2024 iThome 鐵人賽

DAY 9
2

如何建立 materialization

materialization 的寫法跟 macro 很類似,都是使用 jinja 語法,僅在開頭結尾有差異(macro 要在開頭寫 macro,結尾寫 endmacro、而 materialization 則是開頭寫 materialization,結尾寫 endmaterialization)

官方的教程中有介紹建立 materialization 步驟,以下就一步步介紹:

建立 materialization

  1. 準備數據庫

    materialization 會在數據庫中創建新的表、視圖等物件,或插入、更新、刪除數據,所以這一階段要先確定數據庫狀態再決定要運行什麼操作。

    例如目前要建立 table materialization,但已有相同名稱的視圖已存在數據庫中,
    就需要先刪除該視圖,後續才能建立 table

  2. 運行 pre_hooks

    有些 model 在建立前需要先執行一些程序,這些程序會放在 pre_hooks 中,所以在建立 materialization 前會先執行 pre_hooks

  3. 執行建立 materialization 的 SQL

    這段會建立 DML 語法,在數據庫中建立表、視圖等對應物件,是 materialization 中最重要的部分

  4. 運行 post_hooks

    與 post_hooks 類似,會在 model 建立後執行這些程序

  5. 清理

    清理階段會將不需要的關係(relation)清除,或是將關係重新命名,並提交(commit)在上述對於關係的操作到數據庫

  6. 更新關係緩存

    最終需要回傳在 materialization 中建立的關係列表,dbt 會使用此關係列表來更新關係緩存(cache),在減少對數據庫 information_schema 的查詢次數下,仍然可以知道最新的關係(relation)狀態

materialization 配置

materialization 支援客製化的配置(config),像是 incremental materialization 的配置有 unique_key 選項。

自定義的 materialization 也可以定義需要的配置,配置可以分為必要及可選的

# 可選
config.get('optional_config_name', default="the default") 
# 必須
config.require('required_config_name')

在寫自定義的 materialization 除了根據上述步驟外,還可以參考 dbt materialization 的 source code

在接下來幾篇文章中,將會介紹如何用 materialization 實作 BigQuery 的 UDF。

參考


上一篇
用 macro 管理 BQ UDF 的缺點
下一篇
透過 materialization 來實作 BQ UDF
系列文
dbt 修煉之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言