我正在編寫大量的SQL腳本以供大量人員共享,他們通常會通過稍微爲其特定目的編輯腳本來處理腳本,然後使用修改後的腳本生成數據集以供進一步分析。面向大型分析的SQL腳本庫的設計模式?
我一直在努力構建和組織這樣的圖書館。我想要更多的結構,而不僅僅是一個包含諸如「signups_and_spend_by_week.sql」之類的長文件列表的文件夾。我看到基本上有兩個相互關聯的問題:
參數化。像日期和樣本大小等事情相對容易拉出並變成變量,但是改變查詢性質的參數又如何呢?比如說將左連接變爲內連接? (a)評論這些可能性是否明智,(b)創建兩個版本(因此創建嚴重的DRY問題),或者(c)用更高級的編程語言來包裝查詢,這些語言可以更容易地表示這些類型例如,
q = "SELECT * FROM plants" if want_all: q = _q + "LEFT JOIN fruits ON fruits.plant_id = plants.id" else: q = _q + "INNER JOIN fruit ON fruits.plant_id = plants.id" run_query(q)
幹。我發現相同的模式不斷出現,爲更復雜的查詢創建了相似或相同的視圖作爲中間步驟。我的想法是將這些可重複使用的數據分離出來,並根據需要調用它們。但是,我擔心這會在整個庫中創建依賴關係,並且對「基本」查詢的看似無害的更改可能會無意中破壞別人的查詢。除了紀律和良好的文檔/規則之外,他們可能會做出一些妥協,例如自動化測試?