萬字長文帶你瞭解 ETL 和數據建模~!

什麼是 ETL

ETL 是數據抽取(Extract)、轉換(Transform)、加載(Load )的簡寫,它是將 OLTP 系統中的數據經過抽取,並將不同數據源的數據進行轉換、整合,得出一致性的數據,然後加載到數據倉庫中。簡而言之 ETL 是完成從 OLTP 系統到 OLAP 系統的過程

數據倉庫的架構

數據倉庫(Data Warehouse \ DW)是基於 OLTP 系統的數據源,爲了便於多維分析和 多角度展現將其數據按特定的模式進行存儲而建立的關係型數據庫,它不同於多維數據庫,數據倉庫中的數據是細節的,集成的,數據倉庫是面向主題的,是以 OLAP 系統爲分析目的。它包括星型架構與雪花型架構,其中星型架構中間爲事實表,四周爲維度表, 類似星星;雪花型架構中間爲事實表,兩邊的維度表可以再有其關聯子表,而在星型中只允許一張表作爲維度表與事實表關聯,雪花型一維度可以有多張表,而星型 不可以。考慮到效率時,星型聚合快,效率高,不過雪花型結構明確,便於與 OLTP 系統交互。在實際項目中,我們將綜合運用星型架構與雪花型架構。

ETL 構建企業級數據倉庫五步法的流程

1. 確定主題

即 確定數據分析或前端展現的某一方面的分析主題,例如我們分析某年某月某一地區的啤酒銷售情況,就是一個主題。主題要體現某一方面的各分析角度(維度)和統 計數值型數據(量度),確定主題時要綜合考慮,一個主題在數據倉庫中即爲一個數據集市,數據集市體現了某一方面的信息,多個數據集市構成了數據倉庫。

2. 確定量度

在 確定了主題以後,我們將考慮要分析的技術指標,諸如年銷售額此類,一般爲數值型數據,或者將該數據彙總,或者將該數據取次數,獨立次數或取最大最小值 等,這樣的數據稱之爲量度。量度是要統計的指標,必須事先選擇恰當,基於不同的量度可以進行復雜關鍵性能指標(KPI)等的計算。

3. 確定事實數據粒度

在 確定了量度之後我們要考慮到該量度的彙總情況和不同維度下量度的聚合情況,考慮到量度的聚合程度不同,我們將採用 “最小粒度原則”,即將量度的粒度設置 到最小,例如我們將按照時間對銷售額進行彙總,目前的數據最小記錄到天,即數據庫中記錄了每天的交易額,那麼我們不能在 ETL 時將數據進行按月或年彙總, 需要保持到天,以便於後續對天進行分析。而且我們不必擔心數據量和數據沒有提前彙總帶來的問題,因爲在後續的建立 CUBE 時已經將數據提前彙總了。

4. 確定維度

維 度是要分析的各個角度,例如我們希望按照時間,或者按照地區,或者按照產品進行分析,那麼這裏的時間、地區、產品就是相應的維度,基於不同的維度我們可 以看到各量度的彙總情況,我們可以基於所有的維度進行交叉分析。這裏我們首先要確定維度的層次(Hierarchy)和級別(Level)(圖 四:pic4.jpg),維度的層次是指該維度的所有級別,包括各級別的屬性;維度的級別是指該維度下的成員,例如當建立地區維度時我們將地區維度作爲一 個級別,層次爲省、市、縣三層,考慮到維度表要包含儘量多的信息,所以建立維度時要符合 “矮胖原則”,即維度表要儘量寬,儘量包含所有的描述性信息,而不 是統計性的數據信息。

還有一種常見的情況,就是父子型維度,該維度一般用於非葉子節點含有成員等情況,例如公司員工 的維度,在統計員工的工資時,部 門主管的工資不能等於下屬成員工資的簡單相加,必須對該主管的工資單獨統計,然後該主管部門的工資等於下屬員工工資加部門主管的工資,那麼在建立員工維度 時,我們需要將員工維度建立成父子型維度,這樣在統計時,主管的工資會自動加上,避免了都是葉子節點纔有數據的情況。

另外,在建立維度表時要充 分使用代理鍵,代理鍵是數值型的 ID 號碼,好處是代理鍵唯一標識了每一維度成員信息,便於區分,更重要的是在聚合時由於數值型匹 配,JOIN 效率高,便於聚合,而且代理鍵對緩慢變化維度有更重要的意義,它起到了標識歷史數據與新數據的作用,在原數據主鍵相同的情況下,代理鍵起到了 對新數據與歷史數據非常重要的標識作用。

有時我們也會遇到維度緩慢變化的情況,比如增加了新的產品,或者產品的 ID 號碼修改了,或者產品增加了一個新的屬性,此時某一維度的成員會隨着新的數據的加入而增加新的維度成員,這樣我們要考慮到緩慢變化維度的處理,對於緩慢變化維度,有三種情況:

  1. 緩慢變化維度第一種類型:歷史數據需要修改。這樣新來的數據要改寫歷史數據,這時我們要使用 UPDATE,例如產品的 ID 號碼爲 123,後來發現 ID 號碼錯誤了,需要改寫成 456,那麼在修改好的新數據插入時,維度表中原來的 ID 號碼會相應改爲 456,這樣在維度加載時要使用第一種類型,做法是完全更 改。

  2. 緩慢變化維度第二種類型:歷史數據保留,新增數據也要保留。這時要將原數據更新,將新數據插入,需要使用 UPDATE / INSERT,比如某一員工 2005 年在 A 部門,2006 年時他調到了 B 部門。那麼在統計 2005 年的數據時就應該將該員工定位到 A 部門;而在統計 2006 年數據時就應該定位到 B 部門,然後再有新的數據插入時,將按照新部門(B 部門)進行處理,這樣我們的做法是將該維度成員列表加入標識列,將歷史的 數據標識爲 “過期”,將目前的數據標識爲 “當前的”。另一種方法是將該維度打上時間戳,即將歷史數據生效的時間段作爲它的一個屬性,在與原始表匹配生成事 實表時將按照時間段進行關聯,這樣的好處是該維度成員生效時間明確。

  3. 緩慢變化維度第三種類型:新增數據維度成員改變了屬性。例如某一維度成 員新加入了一列,該列在歷史數據中不能基於它瀏覽,而在目前數據和將來數據中可 以按照它瀏覽,那麼此時我們需要改變維度表屬性,即加入新的列,那麼我們將使用存儲過程或程序生成新的維度屬性,在後續的數據中將基於新的屬性進行查看。

5. 創建事實表

在確定好事實數據和維度後,我們將考慮加載事實表。

在公司的大量數據堆積如山時,我們想看看裏面究竟是什麼,結果發現裏面是一筆筆生產記錄,一筆筆交易記錄… 那麼這些記錄是我們將要建立的事實表的原始數據,即關於某一主題的事實記錄表。

我 們的做法是將原始表與維度表進行關聯,生成事實表(圖六:pic6.jpg)。注意在關聯時有爲空的數據時(數據源髒),需要使用外連接,連接後我們將 各維度的代理鍵取出放於事實表中,事實表除了各維度代理鍵外,還有各量度數據,這將來自原始表,事實表中將存在維度代理鍵和各量度,而不應該存在描述性信 息,即符合 “瘦高原則”,即要求事實表數據條數儘量多(粒度最小),而描述性信息儘量少。

如果考慮到擴展,可以將事實表加一唯一標識列,以爲了以後擴展將該事實作爲雪花型維度,不過不需要時一般建議不用這樣做。

事 實數據表是數據倉庫的核心,需要精心維護,在 JOIN 後將得到事實數據表,一般記錄條數都比較大,我們需要爲其設置複合主鍵和索引,以爲了數據的完整性和 基於數據倉庫的查詢性能優化,事實數據表與維度表一起放於數據倉庫中,如果前端需要連接數據倉庫進行查詢,我們還需要建立一些相關的中間彙總表或物化視圖,以方便查詢。

ETL 中高級技巧的運用

1. 準備區的運用

在構建數據倉庫時,如果數據源位於一服務器上,數據倉庫在另一 服務器端,考慮到數據源 Server 端訪問頻繁,並且數據量大,需要不斷更新,所以可以建立準備區數據庫(圖七:pic7.jpg)。先將數據抽取到準備 區中,然後基於準備區中的數據進行處理,這樣處理的好處是防止了在原 OLTP 系統中中頻繁訪問,進行數據運算或排序等操作。例如我們可以按照天將數據抽取 到準備區中,基於數據準備區,我們將進行數據的轉換,整合,將不同數據源的數據進行一致性處理。數據準備區中將存在原始抽取表,一些轉換中間表和臨時表以 及 ETL 日誌表等。

2. 時間戳的運用

時間維度對於某一事實主題來說十分重要,因爲不同的時間有不同的統計數據信息,那麼按照時間記錄 的信息將發揮很重要的作用。在 ETL 中,時間戳有其特殊的 作用,在上面提到的緩慢變化維度中,我們可以使用時間戳標識維度成員;在記錄數據庫和數據倉庫的操作時,我們也將使用時間戳標識信息,例如在進行數據抽取 時,我們將按照時間戳對 OLTP 系統中的數據進行抽取,比如在午夜 0:00 取前一天的數據,我們將按照 OLTP 系統中的時間戳取 GETDATE 到 GETDATE 減一天,這樣得到前一天數據。

3. 日誌表的運用

在對數據進行處理時,難免會發生數據處理錯誤,產生出錯信息,那麼我們 如何獲得出錯信息並及時修正呢? 方法是我們使用一張或多張 Log 日誌表,將出錯信息記錄下來,在日誌表中我們將記錄每次抽取的條數,處理成功的條數,處理失敗的條數,處理失敗的數據,處 理時間等等,這樣當數據發生錯誤時,我們很容易發現問題所在,然後對出錯的數據進行修正或重新處理。

4. 使用調度

在對數據倉庫進行 增量更新時必須使用調度(圖八:pic8.jpg),即對事實數據表進行增量更新處理,在使用調度前要考慮到事實數據量,需要多長時間更 新一次,比如希望按天進行查看,那麼我們最好按天進行抽取,如果數據量不大,可以按照月或半年對數據進行更新,如果有緩慢變化維度情況,調度時需要考慮到 維度表更新情況,在更新事實數據表之前要先更新維度表。

調度是數據倉庫的關鍵環節,要考慮縝密,在 ETL 的流程搭建好後,要定期對其運行,所以 調度是執行 ETL 流程的關鍵步驟,每一次調度除了寫入 Log 日誌表 的數據處理信息外,還要使用發送 Email 或報警信息等,這樣也方便的技術人員對 ETL 流程的把握,增強了安全性和數據處理的準確性。

ETL 構建數據倉庫需要簡單的五步,掌握了這五步的方法我們將構建一個強大的數據倉庫,不過每一步都有很深的需要研究與挖掘,尤其在實際項目中,我們要綜合考慮,例如如果數據源的髒數據很多,在搭建數據倉庫之前我們首先要進行數據清洗,以剔除掉不需要的信息和髒數據。

總之,ETL 是數據倉庫的核心,掌握了 ETL 構建數據倉庫的五步法,就掌握了搭建數據倉庫的根本方法。不過,我們不能教條,基於不同的項目,我們還將要進行 具體分析,如父子型維度和緩慢變化維度的運用等。在數據倉庫構建中,ETL 關係到整個項目的數據質量,所以馬虎不得,必須將其擺到重要位置,將 ETL 這一 大廈根基築牢。

ETL 和 SQL 的區別與聯繫

如果 ETL 和 SQL 來說,肯定是 SQL 效率高的多。但是雙方各有優勢,先說 ETL,ETL 主要面向的是建立數據倉庫來使用的。ETL 更偏向數據清洗,多數據源數據整合,獲取增量,轉換加載到數據倉庫所使用的工具。比如我有兩個數據源,一個是數據庫的表,另外一個是 excel 數據,而我需要合併這兩個數據,通常這種東西在 SQL 語句中比較難實現。但是 ETL 卻有很多現成的組件和驅動,幾個組件就搞定了。還有比如跨服務器,並且服務器之間不能建立連接的數據源,比如我們公司系統分爲一期和二期,存放的數據庫是不同的,數據結構也不相同,數據庫之間也不能建立連接,這種情況下,ETL 就顯得尤爲重要和突出。通過固定的抽取,轉換,加載到數據倉庫中,即可很容易實現。

那麼 SQL 呢?SQL 事實上只是固定的腳本語言,但是執行效率高,速度快。不過靈活性不高,很難跨服務器整合數據。所以 SQL 更適合在固定數據庫中執行大範圍的查詢和數據更改,由於腳本語言可以隨便編寫,所以在固定數據庫中能夠實現的功能就相當強大,不像 ETL 中功能只能受組件限制,組件有什麼功能,才能實現什麼功能。

所以具體我們在什麼時候使用 ETL 和 SQL 就很明顯了,當我們需要多數據源整合建立數據倉庫,並進行數據分析的時候,我們使用 ETL。如果是固定單一數據庫的數據層次處理,我們就使用 SQL。當然,ETL 也是離不開 SQL 的。

ETL 算法和工具簡介:

1. 常用的 ETL 工具

主要有三大主流工具,分別是 Ascential 公司的 Datastage、Informatica 公司的 Powercenter、NCR Teradata 公司的 ETL Automation. 還有其他開源工具,如 PDI(Kettle) 等。

2.ETL 是 DW 系統的基礎

DW 系統以事實發生數據爲基礎,自產數據較少。

一個企業往往包含多個業務系統,均可能成爲 DW 數據源。

業務系統數據質量良莠不齊,必須學會去僞存真。

業務系統數據紛繁複雜,要整合進數據模型。

源數據之間關係也紛繁複雜,源數據在加工進 DW 系統時,有些必須遵照一定的先後次序關係;

3. 源數據的分類

流水事件表:此類源表用於記錄交易等動作的發生,在源系統中會新增、大部分不會修改和刪除,少量表存在刪除情況。如定期存款登記簿;

常規狀態表:此類源表用於記錄數據信息的狀態。在源系統中會新增、修改,也存在刪除的情況。如客戶信息表;

代碼參數表:此類源表用於記錄源系統中使用到的數據代碼和參數;

4. 數據文件的類型

數據文件大多數以 1 天爲固定的週期從源系統加載到數據倉庫。數據文件包含增量,全量以及待刪除的增量。

增量數據文件:數據文件的內容爲數據表的增量信息,包含表內新增及修改的記錄。

全量數據文件:數據文件的內容爲數據表的全量信息,包含表內的所有數據。

帶刪除的增量:數據文件的內容爲數據表的增量信息,包含表內新增、修改及刪除的記錄,通常刪除的記錄以字段 DEL_IND='D'標識該記錄。

5.ETL 標準算法

可劃分爲:歷史拉鍊算法、追加算法 (事件表)、Upsert 算法(主表) 及全刪全加算法(參數表);

6.ETL 標準算法選擇

歷史拉鍊:根據業務分析要求,對數據變化都要記錄,需要基於日期的連續歷史軌跡;

追加 (事件表):根據業務分析要求,對數據變化都要記錄,不需要基於日期的連續歷史軌跡;

Upsert(主表):根據業務分析要求,對數據變化不需要都要記錄,當前數據對歷史數據有影響;

全刪全加算法 (參數表):根據業務分析要求,對數據變化不需要都要記錄,當前數據對歷史數據無影響;

7. 歷史拉鍊法

所謂拉鍊,就是記錄歷史,記錄一個事務從開始,一直到當前狀態的所有變化信息 (參數新增開始結束日期);

8. 追加算法

一般用於事件表,事件之間相對獨立,不存在對歷史信息進行更新;

9.Upsert 算法

是 update 和 insert 組合體,一般用於對歷史信息變化不需要進行跟蹤保留、只需其最新狀態且數據量有一定規模的表,如客戶資料表;

10. 全刪全加算法

一般用於數據量不大的參數表,把歷史數據全部刪除,然後重新全量加載;

11. 處理複雜度

歷史拉鍊,Upsert,Append, 全刪全加; 加載性能:全刪全加,Append,Upsert,歷史拉鍊;

12. 近源模型層主要算法

APPEND 算法,常規拉鍊算法,全量帶刪除拉鍊算法;

13. 整合模型層算法

APPEND 算法,MERGE 算法,常規拉鍊算法,基於增量數據的刪除拉鍊算法,基於全量數據的刪除拉鍊算法,經濟型常規拉鍊算法,經濟型基於增量數據的刪除拉鍊算法,經濟型基於全量數據的刪除拉鍊算法,PK_NOT_IN_APPEND 算法,源日期字段自拉鍊算法;

14. 技術緩衝到近源模型層的數據流算法 - APPEND 算法

此算法通常用於流水事件表,適合這類算法的源表在源系統中不會更新和刪除,而只會發生一筆添加一筆,所以只需每天將交易日期爲當日最新數據取過來直接附加到目標表即可,此類表在近源模型層的字段與技術緩衝層、源系統表基本上完全一致,不會額外增加物理化處理字段,使用時也與源系統表的查詢方式相同;

15. 技術緩衝到近源模型層的數據流算法 - 常規拉鍊算法

此算法通常用於無刪除操作的常規狀態表,適合這類算法的源表在源系統中會新增、修改,但不刪除,所以需每天獲取當日末最新數據 (增量或全增量均可),先找出真正的增量數據(新增和修改),用它們將目標表中屬性發生修改的開鏈數據(有效數據) 進行關鏈操作(即 END_DT 關閉到當前業務日期),然後再將最新的增量數據作爲開鏈數據插入到目標表即可。

此類表再近源模型層比技術緩衝層、源系統的相應表額外增加兩個物理化處理字段 START_DT(開始日期) 和 END_DT(結束日期),使用時需要先選定視覺日期,通過 START_DT 和 END_DT 去卡視覺日期,即 START_DT<='視覺日期'AND END_DT>'視覺日期';

16. 技術緩衝到近源模型層的數據流算法 - 全量帶刪除拉鍊算法

此算法通常用於有刪除操作的常規狀態類表,並且要求全量的數據文件,用以對比出刪除增量; 適合這類算法的源表在源系統中會新增,修改,刪除,每天將當日末最新全量數據取過來外,分別找出真正的增量數據 (新增,修改) 和刪除增量數據,用它們將目標表中屬性發生修改的開鏈數據 (有效數據) 進行關鏈操作(即 END_DT 關閉到當前業務日期),然後再將最新增量數據中真正的增量及刪除數據作爲開鏈數據插入到目標表即可,注意刪除記錄的刪除標誌 DEL_IND 會設置爲‘D’;

此類表在近源模型層比技術緩衝層,源系統的相應表額外增加三個物理化處理字段 START_DT(開始日期),ENT_DT(結束日期),DEL_IND(刪除標準)。使用方式分兩類:一時一般查詢使用,此時需要先選定視角日期,通過 START_DT 和 END_DT 去卡視角日期,即 START_DT<='視角日期' AND END_DT>‘視角日期’,同時加上條件 DEL_IND <> 'D'; 另一種是下載或獲取當日增量數據,此時就是需要 START_DT<='視角日期' AND END_DT>'視角日期' 一個條件即可,不需要加 DEL_IND <> 'D'的條件。

17. 近源模型層到整合模型層的數據流算法 - APPEND 算法

此算法通常用於流水事件表,適合這類算法的源表在源系統中不會更新和刪除,而只會發生一筆添加一筆,所以只需每天將交易日期爲當日的最新數據取過來直接附加到目標表即可;

通常建一張名爲 VT_NEW_編號的臨時表,用於將各組當日最新數據轉換加到 VT_NEW_編號後,再一次附加到最終目標表;

18. 近源模型層到整合模型層的數據流算法 - MERGE INTO 算法

此算法通常用於無刪除操作的常規狀態表,一般是無需保留歷史而只保留當前最新狀態的表,適合這類算法的源表在源系統中會新增,修改,但不刪除,所以需獲取當日末最新數據 (增量或全量均可),用於 MERGE IN 或 UPSERT 目標表; 爲了效率及識別真正增量的要求,通常先識別出真正的增量數據 (新增及修改數據),然後再用這些真正的增量數據向目標表進行 MERGE INTO 操作;

通常建兩張臨時表,一個名爲 VT_NEW_編號,用於將各組當日最新數據轉換加到 VT_NEW_編號; 另一張名爲 VT_INC_編號,將 VT_NEW_編號與目標表中昨日的數據進行對比後找出真正的增量數據 (新增和修改) 放入 VT_INC_編號,然後再用 VT_INC_編號對最終目標表進行 MERGE INTO 或 UPSERT。

19. 近源模型層到整合模型層的數據流算法 - 常規拉鍊算法

此算法通常用於無刪除操作的常規狀態表,適合這類算法的源表在源系統中會新增、修改,但不刪除,所以需每天獲取當日末最新數據 (增量或全增量均可),先找出真正的增量數據(新增和修改),用它們將目標表中屬性發生修改的開鏈數據(有效數據) 進行關鏈操作(即 END_DT 關閉到當前業務日期),然後再將最新增量數據作爲開鏈數據插入到目標表即可;

通常建兩張臨時表,一個名爲 VT_NEW_編號,用於將各組當日最新數據轉換加到 VT_NEW_編號; 另一張名爲 VT_INC_編號,將 VT_NEW_編號與目標表中昨日的數據進行對比後找出真正的增量數據 (新增和修改) 放入 VT_INC_編號,然後再將最終目標表的開鏈數據中的 PK 出現在 VT_INT_編號中進行關鏈處理,然後將 VT_INC_編號中的所有數據作爲開鏈數據插入最終目標表即可。

20. 近源模型層到整合模型層的數據流算法 - 基於增量數據刪除拉鍊算法

此算法通常用於有刪除操作的常規狀態表,並且要求刪除數據是以 DEL_IND='D'刪除增量的形式提供; 適合這類算法的源表再源系統中會新增、修改、刪除,除每天獲取當日末最新數據 (增量或全量均可) 外,還要獲取當日刪除的數據,根據找出的真正增量數據 (新增和修改) 以及刪除增量數據,用它們將目標表中屬性發生修改的開鏈數據 (有效數據) 進行關鏈操作 (即 END_DT 關閉到當前業務時間),然後再將增量(不含刪除數據) 作爲開鏈數據插入到目標表中即可;

通常建三張臨時表,一個名爲 VT_NEW_編號,用於將各組當日最新數據 (不含刪除數據) 轉換加載到 VT_NEW_編號; 第二張表名爲 VT_INC_編號,用 VT_NEW_編號與目標表中的昨日的數據進行對比後找出真正的增量數據放入 VT_INC_編號; 第三張表名爲 VT_DEL_編號,將刪除增量數據轉換加載到 VT_DEL_編號; 最後再將最終目標表的開鏈數據中 PK 出現在 VT_INC_編號或 VT_DEL_編號中的進行關鏈處理,最後將 VT_INC_編號中的所有數據作爲開鏈數據插入最終目標表即可;

21. 近源模型層到整合模型層的數據流算法 - 基於全量數據刪除拉鍊算法

此算法通常用於有刪除操作的常規狀態表,並且要求提供全量數據,用以對比出刪除增量; 適合這類算法的源表在源系統中會新增、修改、每天將當日末的最新全量數據取過來外,分別找出真正的增量數據 (新增、修改) 和刪除增量數據,用它們將目標表中屬性發生修改的開鏈數據 (有效記錄) 進行關鏈操作 (即 END_DT 關閉到當前業務時間),然後再將最新數據中真正的增量數據(不含刪除數據) 作爲開鏈數據插入到目標表即可;

通常建兩張臨時表,一個名爲 VT_NEW_編號,用於將各組當日最新全量數據轉換到 VT_NEW_編號; 另一張表名爲 VT_INC_編號, 將 VT_NEW_編號與目標表中昨日的數據進行對比後找出真正的增量數據 (新增、修改) 和刪除增量數據放入 VT_INC_編號,注意將其中的刪除增量數據的 END_DT 置以最小日期 (借用); 最後再將最終目標表的開鏈數據中 PK 出現再 VT_INC_編號或 VT_DEL_編號中的進行關鏈處理,然後將 VT_INC_編號中所有的 END_DT 不等於最小日期數據(非刪除數據) 作爲開鏈數據插入最終目標表即可;

22. 近源模型層到整合模型層的數據流算法 - 經濟型常規拉鍊算法

此算法基本等同與常規拉算法,只是在最後一步只將屬性非空即非 0 的記錄才作爲開鏈數據插入目標表;

23. 近源模型層到整合模型層的數據流算法 - 經濟型基於增量數據刪除拉鍊算法

此算法基本等同於基於增量數據刪除拉鍊算法,只是在最後一步只將屬性非空及非 0 的記錄才作爲開鏈數據插入目標表;

24. 近源模型層到整合模型層的數據流算法 - 經濟型基於全量數據刪除拉鍊算法

此算法基本等同於基於全量數據刪除拉鍊算法,只是在最後一步只將屬性非空及非 0 的記錄才作爲開鏈數據插入目標表;

25. 近源模型層到整合模型層的數據流算法 - PK_NOT_IN_APPEND 算法

此算法是對每一組只將 PK 在當前 VT_NEW_編號表中未出現的數據再插入 VT_NEW_編號表,最後再將 PK 未出現在目標表中的數據插入目標表,以保證只進那些 PK 未進過的數據;

26. 近源模型層到整合模型層的數據流算法 - 以源日期字段自拉鍊算法

此算法是源表中有日期字段標識當前記錄的生效日期,本算法通過對同主鍵記錄按這個生效日期排序後,一次首尾相連行形成一條自然拉鍊的算法

作者 | 胡保強

原文 | https://zhuanlan.zhihu.com/p/59184600

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/kYYJ7MjqDXBWMo6vo6Eg7g