<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          萬字長文詳解ETL和數據建模~!

          共 9753字,需瀏覽 20分鐘

           ·

          2021-06-25 20:06


          源 /         文/ 




          什么是ETL

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

          數據倉庫的架構

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

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

          1.確定主題

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

          2.確定量度

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

          3.確定事實數據粒度

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

          4.確定維度

          維 度是要分析的各個角度,例如我們希望按照時間,或者按照地區(qū),或者按照產品進行分析,那么這里的時間、地區(qū)、產品就是相應的維度,基于不同的維度我們可 以看到各量度的匯總情況,我們可以基于所有的維度進行交叉分析。這里我們首先要確定維度的層次(Hierarchy)和級別(Level)(圖 四:pic4.jpg),維度的層次是指該維度的所有級別,包括各級別的屬性;維度的級別是指該維度下的成員,例如當建立地區(qū)維度時我們將地區(qū)維度作為一 個級別,層次為省、市、縣三層,考慮到維度表要包含盡量多的信息,所以建立維度時要符合“矮胖原則”,即維度表要盡量寬,盡量包含所有的描述性信息,而不 是統(tǒng)計性的數據信息。
          還有一種常見的情況,就是父子型維度,該維度一般用于非葉子節(jié)點含有成員等情況,例如公司員工 的維度,在統(tǒng)計員工的工資時,部 門主管的工資不能等于下屬成員工資的簡單相加,必須對該主管的工資單獨統(tǒng)計,然后該主管部門的工資等于下屬員工工資加部門主管的工資,那么在建立員工維度 時,我們需要將員工維度建立成父子型維度,這樣在統(tǒng)計時,主管的工資會自動加上,避免了都是葉子節(jié)點才有數據的情況。
          另外,在建立維度表時要充 分使用代理鍵,代理鍵是數值型的ID號碼,好處是代理鍵唯一標識了每一維度成員信息,便于區(qū)分,更重要的是在聚合時由于數值型匹 配,JOIN效率高,便于聚合,而且代理鍵對緩慢變化維度有更重要的意義,它起到了標識歷史數據與新數據的作用,在原數據主鍵相同的情況下,代理鍵起到了 對新數據與歷史數據非常重要的標識作用。
          有時我們也會遇到維度緩慢變化的情況,比如增加了新的產品,或者產品的ID號碼修改了,或者產品增加了一個新的屬性,此時某一維度的成員會隨著新的數據的加入而增加新的維度成員,這樣我們要考慮到緩慢變化維度的處理,對于緩慢變化維度,有三種情況:
          1. 緩慢變化維度第一種類型:歷史數據需要修改。這樣新來的數據要改寫歷史數據,這時我們要使用UPDATE,例如產品的ID號碼為123,后來發(fā)現ID 號碼錯誤了,需要改寫成456,那么在修改好的新數據插入時,維度表中原來的ID號碼會相應改為456,這樣在維度加載時要使用第一種類型,做法是完全更 改。
          2. 緩慢變化維度第二種類型:歷史數據保留,新增數據也要保留。這時要將原數據更新,將新數據插入,需要使用UPDATE / INSERT,比如某一員工2005年在A部門,2006年時他調到了B部門。那么在統(tǒng)計2005年的數據時就應該將該員工定位到A部門;而在統(tǒng)計 2006年數據時就應該定位到B部門,然后再有新的數據插入時,將按照新部門(B部門)進行處理,這樣我們的做法是將該維度成員列表加入標識列,將歷史的 數據標識為“過期”,將目前的數據標識為“當前的”。另一種方法是將該維度打上時間戳,即將歷史數據生效的時間段作為它的一個屬性,在與原始表匹配生成事 實表時將按照時間段進行關聯(lián),這樣的好處是該維度成員生效時間明確。
          3. 緩慢變化維度第三種類型:新增數據維度成員改變了屬性。例如某一維度成 員新加入了一列,該列在歷史數據中不能基于它瀏覽,而在目前數據和將來數據中可 以按照它瀏覽,那么此時我們需要改變維度表屬性,即加入新的列,那么我們將使用存儲過程或程序生成新的維度屬性,在后續(xù)的數據中將基于新的屬性進行查看。

          5.創(chuàng)建事實表

          在確定好事實數據和維度后,我們將考慮加載事實表。
          在公司的大量數據堆積如山時,我們想看看里面究竟是什么,結果發(fā)現里面是一筆筆生產記錄,一筆筆交易記錄… 那么這些記錄是我們將要建立的事實表的原始數據,即關于某一主題的事實記錄表。
          我 們的做法是將原始表與維度表進行關聯(lián),生成事實表(圖六:pic6.jpg)。注意在關聯(lián)時有為空的數據時(數據源臟),需要使用外連接,連接后我們將 各維度的代理鍵取出放于事實表中,事實表除了各維度代理鍵外,還有各量度數據,這將來自原始表,事實表中將存在維度代理鍵和各量度,而不應該存在描述性信 息,即符合“瘦高原則”,即要求事實表數據條數盡量多(粒度最小),而描述性信息盡量少。
          如果考慮到擴展,可以將事實表加一唯一標識列,以為了以后擴展將該事實作為雪花型維度,不過不需要時一般建議不用這樣做。
          事 實數據表是數據倉庫的核心,需要精心維護,在JOIN后將得到事實數據表,一般記錄條數都比較大,我們需要為其設置復合主鍵和索引,以為了數據的完整性和 基于數據倉庫的查詢性能優(yōu)化,事實數據表與維度表一起放于數據倉庫中,如果前端需要連接數據倉庫進行查詢,我們還需要建立一些相關的中間匯總表或物化視圖,以方便查詢。

          ETL中高級技巧的運用

          1.準備區(qū)的運用

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

          2.時間戳的運用

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

          3.日志表的運用

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

          4.使用調度

          在對數據倉庫進行 增量更新時必須使用調度(圖八:pic8.jpg),即對事實數據表進行增量更新處理,在使用調度前要考慮到事實數據量,需要多長時間更 新一次,比如希望按天進行查看,那么我們最好按天進行抽取,如果數據量不大,可以按照月或半年對數據進行更新,如果有緩慢變化維度情況,調度時需要考慮到 維度表更新情況,在更新事實數據表之前要先更新維度表。
          調度是數據倉庫的關鍵環(huán)節(jié),要考慮縝密,在ETL的流程搭建好后,要定期對其運行,所以 調度是執(zhí)行ETL流程的關鍵步驟,每一次調度除了寫入Log日志表 的數據處理信息外,還要使用發(fā)送Email或報警信息等,這樣也方便的技術人員對ETL流程的把握,增強了安全性和數據處理的準確性。
          ETL構建數據倉庫需要簡單的五步,掌握了這五步的方法我們將構建一個強大的數據倉庫,不過每一步都有很深的需要研究與挖掘,尤其在實際項目中,我們要綜合考慮,例如如果數據源的臟數據很多,在搭建數據倉庫之前我們首先要進行數據清洗,以剔除掉不需要的信息和臟數據。
          總之,ETL是數據倉庫的核心,掌握了ETL構建數據倉庫的五步法,就掌握了搭建數據倉庫的根本方法。不過,我們不能教條,基于不同的項目,我們還將要進行 具體分析,如父子型維度和緩慢變化維度的運用等。在數據倉庫構建中,ETL關系到整個項目的數據質量,所以馬虎不得,必須將其擺到重要位置,將ETL這一 大廈根基筑牢。

          ETL和SQL的區(qū)別與聯(lián)系

          如果ETL和SQL來說,肯定是SQL效率高的多。但是雙方各有優(yōu)勢,先說ETL,ETL主要面向的是建立數據倉庫來使用的。ETL更偏向數據清洗,多數據源數據整合,獲取增量,轉換加載到數據倉庫所使用的工具。比如我有兩個數據源,一個是數據庫的表,另外一個是excel數據,而我需要合并這兩個數據,通常這種東西在SQL語句中比較難實現。但是ETL卻有很多現成的組件和驅動,幾個組件就搞定了。還有比如跨服務器,并且服務器之間不能建立連接的數據源,比如我們公司系統(tǒng)分為一期和二期,存放的數據庫是不同的,數據結構也不相同,數據庫之間也不能建立連接,這種情況下,ETL就顯得尤為重要和突出。通過固定的抽取,轉換,加載到數據倉庫中,即可很容易實現。
          那么SQL呢?SQL事實上只是固定的腳本語言,但是執(zhí)行效率高,速度快。不過靈活性不高,很難跨服務器整合數據。所以SQL更適合在固定數據庫中執(zhí)行大范圍的查詢和數據更改,由于腳本語言可以隨便編寫,所以在固定數據庫中能夠實現的功能就相當強大,不像ETL中功能只能受組件限制,組件有什么功能,才能實現什么功能。
          所以具體我們在什么時候使用ETL和SQL就很明顯了,當我們需要多數據源整合建立數據倉庫,并進行數據分析的時候,我們使用ETL。如果是固定單一數據庫的數據層次處理,我們就使用SQL。當然,ETL也是離不開SQL的。

          ETL算法和工具簡介:

          1.常用的ETL工具

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

          2.ETL是DW系統(tǒng)的基礎

          DW系統(tǒng)以事實發(fā)生數據為基礎,自產數據較少。
          一個企業(yè)往往包含多個業(yè)務系統(tǒng),均可能成為DW數據源。
          業(yè)務系統(tǒng)數據質量良莠不齊,必須學會去偽存真。
          業(yè)務系統(tǒng)數據紛繁復雜,要整合進數據模型。
          源數據之間關系也紛繁復雜,源數據在加工進DW系統(tǒng)時,有些必須遵照一定的先后次序關系;

          3.源數據的分類

          流水事件表:此類源表用于記錄交易等動作的發(fā)生,在源系統(tǒng)中會新增、大部分不會修改和刪除,少量表存在刪除情況。如定期存款登記簿;
          常規(guī)狀態(tài)表:此類源表用于記錄數據信息的狀態(tài)。在源系統(tǒng)中會新增、修改,也存在刪除的情況。如客戶信息表;
          代碼參數表:此類源表用于記錄源系統(tǒng)中使用到的數據代碼和參數;

          4.數據文件的類型

          數據文件大多數以1天為固定的周期從源系統(tǒng)加載到數據倉庫。數據文件包含增量,全量以及待刪除的增量。
          增量數據文件:數據文件的內容為數據表的增量信息,包含表內新增及修改的記錄。
          全量數據文件:數據文件的內容為數據表的全量信息,包含表內的所有數據。
          帶刪除的增量:數據文件的內容為數據表的增量信息,包含表內新增、修改及刪除的記錄,通常刪除的記錄以字段DEL_IND='D'標識該記錄。

          5.ETL標準算法

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

          6.ETL標準算法選擇

          歷史拉鏈:根據業(yè)務分析要求,對數據變化都要記錄,需要基于日期的連續(xù)歷史軌跡;
          追加(事件表):根據業(yè)務分析要求,對數據變化都要記錄,不需要基于日期的連續(xù)歷史軌跡;
          Upsert(主表):根據業(yè)務分析要求,對數據變化不需要都要記錄,當前數據對歷史數據有影響;
          全刪全加算法(參數表):根據業(yè)務分析要求,對數據變化不需要都要記錄,當前數據對歷史數據無影響;

          7.歷史拉鏈法

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

          8.追加算法

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

          9.Upsert算法

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

          10.全刪全加算法

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

          11.處理復雜度

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

          12.近源模型層主要算法

          APPEND算法,常規(guī)拉鏈算法,全量帶刪除拉鏈算法;

          13.整合模型層算法

          APPEND算法,MERGE算法,常規(guī)拉鏈算法,基于增量數據的刪除拉鏈算法,基于全量數據的刪除拉鏈算法,經濟型常規(guī)拉鏈算法,經濟型基于增量數據的刪除拉鏈算法,經濟型基于全量數據的刪除拉鏈算法,PK_NOT_IN_APPEND算法,源日期字段自拉鏈算法;

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

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

          15.技術緩沖到近源模型層的數據流算法-常規(guī)拉鏈算法

          此算法通常用于無刪除操作的常規(guī)狀態(tài)表,適合這類算法的源表在源系統(tǒng)中會新增、修改,但不刪除,所以需每天獲取當日末最新數據(增量或全增量均可),先找出真正的增量數據(新增和修改),用它們將目標表中屬性發(fā)生修改的開鏈數據(有效數據)進行關鏈操作(即END_DT關閉到當前業(yè)務日期),然后再將最新的增量數據作為開鏈數據插入到目標表即可。
          此類表再近源模型層比技術緩沖層、源系統(tǒng)的相應表額外增加兩個物理化處理字段START_DT(開始日期)和END_DT(結束日期),使用時需要先選定視覺日期,通過START_DT和END_DT去卡視覺日期,即START_DT<='視覺日期'AND END_DT>'視覺日期';

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

          此算法通常用于有刪除操作的常規(guī)狀態(tài)類表,并且要求全量的數據文件,用以對比出刪除增量;適合這類算法的源表在源系統(tǒng)中會新增,修改,刪除,每天將當日末最新全量數據取過來外,分別找出真正的增量數據(新增,修改)和刪除增量數據,用它們將目標表中屬性發(fā)生修改的開鏈數據(有效數據)進行關鏈操作(即END_DT關閉到當前業(yè)務日期),然后再將最新增量數據中真正的增量及刪除數據作為開鏈數據插入到目標表即可,注意刪除記錄的刪除標志DEL_IND會設置為‘D’;
          此類表在近源模型層比技術緩沖層,源系統(tǒng)的相應表額外增加三個物理化處理字段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算法

          此算法通常用于流水事件表,適合這類算法的源表在源系統(tǒng)中不會更新和刪除,而只會發(fā)生一筆添加一筆,所以只需每天將交易日期為當日的最新數據取過來直接附加到目標表即可;
          通常建一張名為VT_NEW_編號的臨時表,用于將各組當日最新數據轉換加到VT_NEW_編號后,再一次附加到最終目標表;

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

          此算法通常用于無刪除操作的常規(guī)狀態(tài)表,一般是無需保留歷史而只保留當前最新狀態(tài)的表,適合這類算法的源表在源系統(tǒng)中會新增,修改,但不刪除,所以需獲取當日末最新數據(增量或全量均可),用于MERGE IN或UPSERT目標表;為了效率及識別真正增量的要求,通常先識別出真正的增量數據(新增及修改數據),然后再用這些真正的增量數據向目標表進行MERGE INTO操作;
          通常建兩張臨時表,一個名為VT_NEW_編號,用于將各組當日最新數據轉換加到VT_NEW_編號;另一張名為VT_INC_編號,將VT_NEW_編號與目標表中昨日的數據進行對比后找出真正的增量數據(新增和修改)放入VT_INC_編號,然后再用VT_INC_編號對最終目標表進行MERGE INTO或UPSERT。

          19.近源模型層到整合模型層的數據流算法-常規(guī)拉鏈算法

          此算法通常用于無刪除操作的常規(guī)狀態(tài)表,適合這類算法的源表在源系統(tǒng)中會新增、修改,但不刪除,所以需每天獲取當日末最新數據(增量或全增量均可),先找出真正的增量數據(新增和修改),用它們將目標表中屬性發(fā)生修改的開鏈數據(有效數據)進行關鏈操作(即END_DT關閉到當前業(yè)務日期),然后再將最新增量數據作為開鏈數據插入到目標表即可;
          通常建兩張臨時表,一個名為VT_NEW_編號,用于將各組當日最新數據轉換加到VT_NEW_編號;另一張名為VT_INC_編號,將VT_NEW_編號與目標表中昨日的數據進行對比后找出真正的增量數據(新增和修改)放入VT_INC_編號,然后再將最終目標表的開鏈數據中的PK出現在VT_INT_編號中進行關鏈處理,然后將VT_INC_編號中的所有數據作為開鏈數據插入最終目標表即可。

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

          此算法通常用于有刪除操作的常規(guī)狀態(tài)表,并且要求刪除數據是以DEL_IND='D'刪除增量的形式提供;適合這類算法的源表再源系統(tǒng)中會新增、修改、刪除,除每天獲取當日末最新數據(增量或全量均可)外,還要獲取當日刪除的數據,根據找出的真正增量數據(新增和修改)以及刪除增量數據,用它們將目標表中屬性發(fā)生修改的開鏈數據(有效數據)進行關鏈操作(即END_DT關閉到當前業(yè)務時間),然后再將增量(不含刪除數據)作為開鏈數據插入到目標表中即可;
          通常建三張臨時表,一個名為VT_NEW_編號,用于將各組當日最新數據 (不含刪除數據)轉換加載到VT_NEW_編號;第二張表名為VT_INC_編號,用VT_NEW_編號與目標表中的昨日的數據進行對比后找出真正的增量數據放入VT_INC_編號;第三張表名為VT_DEL_編號,將刪除增量數據轉換加載到VT_DEL_編號;最后再將最終目標表的開鏈數據中PK出現在VT_INC_編號或VT_DEL_編號中的進行關鏈處理,最后將VT_INC_編號中的所有數據作為開鏈數據插入最終目標表即可;

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

          此算法通常用于有刪除操作的常規(guī)狀態(tài)表,并且要求提供全量數據,用以對比出刪除增量;適合這類算法的源表在源系統(tǒng)中會新增、修改、每天將當日末的最新全量數據取過來外,分別找出真正的增量數據(新增、修改)和刪除增量數據,用它們將目標表中屬性發(fā)生修改的開鏈數據(有效記錄)進行關鏈操作(即END_DT關閉到當前業(yè)務時間),然后再將最新數據中真正的增量數據(不含刪除數據)作為開鏈數據插入到目標表即可;
          通常建兩張臨時表,一個名為VT_NEW_編號,用于將各組當日最新全量數據轉換到VT_NEW_編號;另一張表名為VT_INC_編號,將VT_NEW_編號與目標表中昨日的數據進行對比后找出真正的增量數據(新增、修改)和刪除增量數據放入VT_INC_編號,注意將其中的刪除增量數據的END_DT置以最小日期(借用);最后再將最終目標表的開鏈數據中PK出現再VT_INC_編號或VT_DEL_編號中的進行關鏈處理,然后將VT_INC_編號中所有的END_DT不等于最小日期數據(非刪除數據)作為開鏈數據插入最終目標表即可;

          22.近源模型層到整合模型層的數據流算法-經濟型常規(guī)拉鏈算法

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

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

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

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

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

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

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

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

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



          好文推薦


          拜訪了這位小哥的GitHub后,我失眠了


          知乎高贊:國內高校的計算機專業(yè)教育都怎么啦?


          鴻蒙到底是不是Android套皮?(少BB看源碼)






          一鍵三連「分享」、「點贊」和「在看」

          技術干貨與你天天見~




          瀏覽 57
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色播婷婷丁香五月天 | 亚洲高清有码无码视频 | 无码人妻精品一二三在线99绯色 | 亚洲天堂av在线 亚洲天堂影音先锋 | 免费黄色色情成人影片 |