在前一篇文章中,我們介紹了 dbt_operator
及其檢索異動 models 的功能。有讀者可能會問:「git_diff_operator
的功能是提取變更的檔案列表,這不是和 dbt_operator
功能重複了嗎?」
實際上,git_diff_operator
能解決 dbt_operator
的兩個重要限制:
dbt_operator
就無法使用。此時 git_diff_operator
可以作為通用的解決方案。git_diff_operator
使用 GitPython 套件在 Python 環境中執行 git 操作。以下是範例應用:
repo = git.Repo(".")
target = repo.head.commit
source = repo.commit("HEAD^1")
diff_index = source.diff(target)
# 檢索不同類型的變更
added_files = diff_index.iter_change_type("A") # 新增的檔案
deleted_files = diff_index.iter_change_type("D") # 刪除的檔案
modified_files = diff_index.iter_change_type("M") # 修改的檔案
renamed_files = diff_index.iter_change_type("R") # 重命名的檔案
for file in renamed_files:
old_name = file.a_path # 變更前的檔案路徑
new_name = file.b_path # 變更後的檔案路徑
檔案路徑的處理規則:
b_path
a_path
a_path
和 b_path
相同a_path
為原名稱,b_path
為新名稱git_diff_operator
作為通用的檔案變更檢測模組,補充 dbt_operator
的功能限制,還幫非 dbt 專案提供了變更追蹤能力。
下一篇文章將介紹 Operator 模組的最後一個組件:bigquery_operator
。