Lookup (查閱) 是 SSIS 資料流程中實現「查詢參考表、決定插入/更新」的核心元件。本文以「舊系統客戶資料同步至新系統」為例,完整示範封裝結構、快取模式設定與效能調優。
DEMO_LK_LegacyCustomer (舊系統),含 5 筆資料。DEMO_LK_Customer (新系統),初始 3 筆。CustomerID 比對,存在則更新 (公司名、姓名、地址),不存在則插入。-- 建表腳本 (略,含 5 筆測試資料,ID 1、3 需更新,4、5 需插入)
LegacyCustomer。LKP_Customer),連接目標資料庫 Customer 表,比對鍵 CustomerID。UPDATE。INSERT。
| 模式 | 運作方式 | 適用場景 | 記憶體壓力 | 資料新鮮度 |
|---|---|---|---|---|
| Full Cache (預設) | 啟動前一次性將參考集載入記憶體雜湊表 | 參考集 < 100 萬列、資料較靜態、重複查閱率高 | 高 (需容納完整參考集) | 封裝啟動時刻的快照 |
| Partial Cache | 按需查詢,結果暫存 LRU 快取 | 參考集大、查閱鍵分布不均、記憶體有限 | 中 (依快取大小上限) | 近似即時 (視快取命中率) |
| No Cache | 每列皆發送 SQL 查詢參考表 | 參考集極大、極少重複鍵、需即時一致性 | 低 | 即時 |
Cache Mode = Full Cache,Connection Type = OLE DB。Ref_ 避免衝突。MaxMemoryUsage:預設 0 (自動),可設定上限 MB。CacheConnectionManager:可改用 Cache Connection Manager 將快取持久化至 .caw 檔,跨封裝/跨執行重用,極大提升重複執行效能。CustomerID **必須有索引** (最好是叢集索引),否則 Partial/No Cache 模式每列查詢會掃表。CustomerID 排序,可提升 Partial Cache 命中率 (連續相同鍵命中快取)。NULL != NULL,若鍵值含 NULL 需在來源端用 ISNULL 轉換或啟用 TreatNullsAsEqual (需 SQL 2012+)。OutOfMemoryException,改用 Partial Cache 或升級記憶體/啟用 .caw 快取檔。