Performance
是否有一種標準方法可以用查找表中的值替換程式碼以進行報告或分析?
假設我有一個“主”表,該表可能已高度規範化,並且主要由僅包含查找其他表的程式碼的列組成(它們可能是外鍵,但如果有意義,請不要在您的答案中假設)。例如,也許這個主表是一個人員列表,其中一列是 for
favorite_color
。當然,我們的查找表看起來像這樣:color_cd color_name 0 Unknown 1 Red 2 Blue 3 Orange 4 Other
現在,如果我要從這個主表創建報告,或者可能將這些數據輸入到某些軟體中供領域專家使用,我寧願用查找表中的程式碼替換
favorite_color
程式碼。color_name
當然,一種解決方案是在我的 SELECT 中使用簡單的 JOIN 來執行此操作:SELECT main.col1, main.col2, colors.color_name as `Favorite Color` FROM main LEFT OUTER JOIN colors ON (main.favorite_color = colors.color_cd);
這可以完成工作。現在假設主表有幾十個甚至幾百個這樣的列和數百萬行。一些查找表很小,如上面的範例,但其他查找表可能有數百或數千個值。
是否有任何一種標準的方式來進行這種轉換,或者是否有幾十個或幾百個連接的長篇大論?這種類型的東西是任何 ETL 產品的典型組件嗎?是否最好編寫一個腳本來處理這個沒有連接和 SQL 之外的?請原諒可能存在一些濫用或誤用術語的情況;我什至不確定上述過程是否有名稱。
在 ETL 過程中,您可以在載入目標表時將程式碼替換為名稱。我將專注於 Informatica PowerCenter,但我確信其他 ETL 工具也提供類似的功能。
有一種
Lookup
轉換用於DNAME
根據定義的查找匹配標準 ( ) 從關係表(也可能是視圖或平面文件)中查找值 (source.DEPTNO = lookup.DEPTNO
)。然後可以將這些值附加到源行並儲存在目標表(用於報告)中。執行會話時,
SELECT
將為映射中的每個查找生成一條語句。**這些語句對數據源執行一次,結果儲存在查找記憶體中。**稍後,當需要查找某個值時,轉換將使用記憶體。