国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)倉知識07:數(shù)據(jù)增量更新的幾種方式

這篇具有很好參考價值的文章主要介紹了數(shù)倉知識07:數(shù)據(jù)增量更新的幾種方式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、增量更新的幾種方式

增量更新的本質(zhì),其實是獲取源表中數(shù)據(jù)變化的情況(增、刪、改),然后將源表中發(fā)生的變化同步至目標(biāo)表中。

不同的方式,獲取源表中數(shù)據(jù)變化的情況不一樣,受技術(shù)的限制、表結(jié)構(gòu)的限制,某些方式可能無法獲取到完整的數(shù)據(jù)變化情況,因此只能適用于特定的場景。

方式 簡述 適用場景 詳述 優(yōu)點 缺點
時間戳增量1

記錄每次讀數(shù)完成時的最大時間戳,后續(xù)讀數(shù)時只獲取源頭表中新增的數(shù)據(jù),將其增量寫入到目標(biāo)表。

  1. 源表只增不刪不改
  2. 源表有時間戳標(biāo)記新增的數(shù)據(jù)
  1. 第一次從源頭表讀取數(shù)據(jù)的動作完成之后,記錄一下時間戳字段中最大的時間點,保存到一個記錄表中。
  2. 第二次從源頭表讀取數(shù)據(jù)之前,先獲取記錄表中最后/最大的時間點,只讀取源表中這個時間點以后的數(shù)據(jù)。
  3. 當(dāng)加載過程全部成功完成之后再更新加載記錄表,更新這次最后的時間點。
性能好
  • 不能捕獲刪除和變化的數(shù)據(jù)
  • 部分源頭表無時間戳字段
時間戳增量2 通過時間戳獲取源頭表新增和修改的數(shù)據(jù),然后將其寫入到目標(biāo)表。
  1. 源表只增、改,不刪
  2. 源表有時間戳標(biāo)記新增和變化的數(shù)據(jù)
  1. 從源頭表首次完成取數(shù)后,記錄最大的 UpdateDate 時間戳,保存到一個記錄表中。
  2. 第二次讀數(shù)時,用記錄表中的時間戳與源表里的 UpdateDate 時間戳相比較,比時間戳大的說明是源頭表中新添加的或者修改的數(shù)據(jù)。對這部分?jǐn)?shù)據(jù)進(jìn)行取數(shù)。
  3. 從源頭表取數(shù)完成后,更新最大的 UpdateDate到記錄表中。
  4. 后續(xù)取數(shù)的邏輯,以此類推。
  1. 增量抽取時,抽取進(jìn)程通過比較上次存檔的時間與抽取源表的時間戳字段的值來決定抽取哪些數(shù)據(jù)。這種方式需要在源表上增加一個時間戳字段,系統(tǒng)中更新修改表數(shù)據(jù)的時候,同時修改時間戳字段的值。
  2. 有的數(shù)據(jù)庫(例如Sql Server)的時間戳支持自動更新,即表的其它字段的數(shù)據(jù)發(fā)生改變時,時間戳字段的值會被自動更新為記錄改變的時刻。在這種情況下,進(jìn)行ETL實施時就只需要在源表加上時間戳字段就可以了。對于不支持時間戳自動更新的數(shù)據(jù)庫,這就要求業(yè)務(wù)系統(tǒng)在更新業(yè)務(wù)數(shù)據(jù)時,通過編程的方式手工更新時間戳字段。
  3. 使用時間戳方式可以正常捕獲源表的插入和更新操作,但對于刪除操作則無能為力,需要結(jié)合其它機(jī)制才能完成。
性能尚可,能夠獲取改動的源頭數(shù)據(jù)
  • 不能捕獲刪除的數(shù)據(jù)
  • 部分源頭表無時間戳字段
觸發(fā)器 為抽取的表建立觸發(fā)器,一般要建立插入、修改、刪除三個觸發(fā)器,源頭表的數(shù)據(jù)發(fā)生變化時,觸發(fā)器將變化的數(shù)據(jù)寫入臨時表,抽取線程再從臨時表中抽取數(shù)據(jù)。 所有場景
  1. 該方式是根據(jù)抽取要求,在要被抽取的源表上建立插入、修改、刪除3個觸發(fā)器,每當(dāng)源表中的數(shù)據(jù)發(fā)生變化,就被相應(yīng)的觸發(fā)器將變化的數(shù)據(jù)寫入一個增量日志表,ETL的增量抽取則是從增量日志表中而不是直接在源表中抽取數(shù)據(jù),同時增量日志表中抽取過的數(shù)據(jù)要及時被標(biāo)記或刪除。
  2. 為了簡單起見,增量日志表一般不存儲增量數(shù)據(jù)的所有字段信息,而只是存儲源表名稱、更新的關(guān)鍵字值和更新操作類型(insert、update或delete),ETL增量抽取進(jìn)程首先根據(jù)源表名稱和更新的關(guān)鍵字值,從源表中提取對應(yīng)的完整記錄,再根據(jù)更新操作類型,對目標(biāo)表進(jìn)行相應(yīng)的處理。

性能好

覆蓋場景全面

成本高,需要建觸發(fā)器
全表對比(MD5) 為源頭表建立一個結(jié)構(gòu)類似的MD5臨時表,每次抽數(shù)時對源頭表和MD5臨時表進(jìn)行MD5校驗碼比對,從而決定源頭表中的數(shù)據(jù)是新增、修改還是刪除,同時更新MD5校驗碼。 所有場景
  1. 全表比對即在增量抽取時,ETL進(jìn)程逐條比較源表和目標(biāo)表的記錄,將新增和修改的記錄讀取出來。
  2. 優(yōu)化之后的全表比對方式是采用MD5校驗碼,需要事先為要抽取的表建立一個結(jié)構(gòu)類似的MD5臨時表,該臨時表記錄源表的主鍵值以及根據(jù)源表所有字段的數(shù)據(jù)計算出來的MD5校驗碼,每次進(jìn)行數(shù)據(jù)抽取時,對源表和MD5臨時表進(jìn)行MD5校驗碼的比對,如有不同,進(jìn)行update操作:如目標(biāo)表沒有存在該主鍵值,表示該記錄還沒有,則進(jìn)行insert操作。然后,還需要對在源表中已不存在而目標(biāo)表仍保留的主鍵值,執(zhí)行delete操作。
覆蓋場景全面 需要全表對比,性能差
全表對比(指定字段) 對比目標(biāo)表和源頭表的幾個關(guān)鍵字段,獲取源頭表和目標(biāo)表不一致的數(shù)據(jù),然后增量寫入到目標(biāo)庫。 所有場景
  1. 由用戶來選擇幾個字段,可以作為唯一標(biāo)識。
  2. 每次抽數(shù)時,對比一下源頭表和目標(biāo)表中這幾個字段的差異,來判定表中數(shù)據(jù)是否存在增、刪、改的情況。
  3. 將源頭表變化的數(shù)據(jù)同步至目標(biāo)表中。
覆蓋場景全面 需要對比大量字段,性能差
分析日志 通過分析數(shù)據(jù)庫自身的日志來判斷變化的數(shù)據(jù)。 所有場景

該方式通過分析數(shù)據(jù)庫自身的日志來判斷變化的數(shù)據(jù)。關(guān)系型數(shù)據(jù)庫系統(tǒng)都會將所有的DML操作存儲在日志文件中,以實現(xiàn)數(shù)據(jù)庫的備份和還原功能。ETL增量抽取進(jìn)程通過對數(shù)據(jù)庫的日志進(jìn)行分析,提取對相關(guān)源表在特定時間后發(fā)生的DML操作信息,就可以得知自上次抽取時刻以來該表的數(shù)據(jù)變化情況,從而指導(dǎo)增量抽取動作。

有些數(shù)據(jù)庫系統(tǒng)提供了訪問日志的專用的程序包(例如Oracle的LogMiner),使數(shù)據(jù)庫日志的分析工作得到大大簡化。

性能好 數(shù)據(jù)庫權(quán)限問題,未必能夠提供日志分析權(quán)限

2、各種方式的差異排序

按同步性能由高到低排序依次為: 時間戳 > 日志解析 > 觸發(fā)器 > 全表比對

按配置復(fù)雜由低到高排序依次為: 全表比對 <日志解析 < 觸發(fā)器 < 時間戳

按易維護(hù)性由高到低排序依次為: 觸發(fā)器 > 日志解析 > 時間戳 > 全表比對

按系統(tǒng)影響由低到高排序依次為:日志解析 < 時間戳 < 全表比對 < 觸發(fā)器

備注:基于目前研究的結(jié)果,增量更新僅適用于明細(xì)數(shù)據(jù)的讀寫場景,不適用于包含單表計算、多表關(guān)聯(lián)的場景,原因是獲取的數(shù)據(jù)并不是全量數(shù)據(jù)。

參考:文章來源地址http://www.zghlxwxcb.cn/news/detail-462441.html

  • ETL實現(xiàn)增量抽取的幾種方式 - ligfoo - 博客園 (cnblogs.com)
  • 數(shù)據(jù)庫增量數(shù)據(jù)的幾種方式_shylhd的專欄-CSDN博客
  • 一般數(shù)據(jù)庫增量數(shù)據(jù)處理和數(shù)據(jù)倉庫增量數(shù)據(jù)處理的幾種策略 - BIWORK - 博客園 (cnblogs.com)

到了這里,關(guān)于數(shù)倉知識07:數(shù)據(jù)增量更新的幾種方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 前端 mock 數(shù)據(jù)的幾種方式

    前端 mock 數(shù)據(jù)的幾種方式

    目錄 接口demo Better-mock just mock koa webpack Charles 總結(jié) ????????具體需求開發(fā)前,后端往往只提供接口文檔,對于前端,最簡單的方式就是把想要的數(shù)據(jù)寫死在代碼里進(jìn)行開發(fā),但這樣的壞處就是和后端聯(lián)調(diào)前還需要再把寫死的數(shù)據(jù)從代碼里刪除,最好的方式是無侵入的? m

    2024年02月17日
    瀏覽(20)
  • 35.MySQL導(dǎo)出數(shù)據(jù)的幾種方式

    1.導(dǎo)出全表數(shù)據(jù)。 select * from test into outfile \\\'/tmp/a.sql\\\'; 2.導(dǎo)出某個數(shù)據(jù)庫下的表。 --secure-file-priv=\\\'\\\'? mysqldump -T /data/backup -u root -prootroot --set-gtid-purged=OFF ?test 將test數(shù)據(jù)庫導(dǎo)出到:backup目錄下。 3.導(dǎo)出自定義格式的文件。 mysql -uroot -prootroot -e \\\"select * from t2;\\\" test t2.sql? id?? ?nam

    2024年02月04日
    瀏覽(21)
  • sql中刪除數(shù)據(jù)的幾種方式

    1、delete語句 Delete刪除表數(shù)據(jù),保留表結(jié)構(gòu),且可以加where,刪除一行或多行。 只清除數(shù)據(jù),保留表結(jié)構(gòu),列,權(quán)限,索引,視圖,關(guān)系等等,相當(dāng)于清零數(shù)據(jù),是一種數(shù)據(jù)庫定義語言(DDL Data Definition Language),執(zhí)行后不能撤銷。 清除數(shù)據(jù)并且銷毀表,是一種數(shù)據(jù)庫定義語言

    2024年02月11日
    瀏覽(25)
  • form表單上傳數(shù)據(jù)的幾種方式

    form表單上傳數(shù)據(jù)的幾種方式

    form 的基本使用 1、什么是表單 表單在網(wǎng)頁中主要負(fù)責(zé) 數(shù)據(jù)采集功能 。HTML中的標(biāo)簽,就是用于采集用戶輸入的信息,并通過標(biāo)簽的提交操作,把用戶收集到的信息發(fā)送到 Web 服務(wù)器進(jìn)行處理。 2、表單的組成部分 表單標(biāo)簽 就是我們常說的form表單,就是所謂的表單標(biāo)簽。 表單

    2024年02月08日
    瀏覽(57)
  • Django傳遞數(shù)據(jù)給前端的幾種方式

    一、使用模板引擎: ????????Django的模板引擎允許在后端代碼中將數(shù)據(jù)傳遞給前端模板,并在模板中進(jìn)行渲染。在視圖函數(shù)中,可以使用 render 函數(shù)來將數(shù)據(jù)傳遞給模板并渲染頁面。例如: 在 my_template.html 模板中可以通過 {{ name }} 和 {{ age }} 來訪問傳遞的數(shù)據(jù)。例如: 二

    2024年01月18日
    瀏覽(22)
  • js中追加數(shù)據(jù)到數(shù)組的幾種方式

    在JavaScript中,有多種方式可以向數(shù)組中追加數(shù)據(jù),包括: push()方法:將一個或多個元素添加到數(shù)組的末尾,并返回新數(shù)組的長度。 var arr = [1, 2, 3]; arr.push(4); console.log(arr); // [1, 2, 3, 4] unshift()方法:將一個或多個元素添加到數(shù)組的開頭,并返回新數(shù)組的長度。 var arr = [2, 3, 4

    2024年02月15日
    瀏覽(16)
  • Unity筆記:數(shù)據(jù)持久化的幾種方式

    主要方法: ScriptableObject PlayerPrefs JSON XML 數(shù)據(jù)庫(如Sqlite) PlayerPrefs 存儲的數(shù)據(jù)是 全局共享 的,它們存儲在用戶設(shè)備的本地存儲中,并且可以被應(yīng)用程序的所有部分訪問。這意味著,無論在哪個場景、哪個腳本中,只要是同一個應(yīng)用程序中的代碼,都可以讀取和修改 Playe

    2024年02月19日
    瀏覽(23)
  • Python爬蟲數(shù)據(jù)存哪里|數(shù)據(jù)存儲到文件的幾種方式

    Python爬蟲數(shù)據(jù)存哪里|數(shù)據(jù)存儲到文件的幾種方式

    前言 大家早好、午好、晚好吖 ? ~歡迎光臨本文章 爬蟲請求解析后的數(shù)據(jù),需要保存下來,才能進(jìn)行下一步的處理,一般保存數(shù)據(jù)的方式有如下幾種: 文件:txt、csv、excel、json等,保存數(shù)據(jù)量小。 關(guān)系型數(shù)據(jù)庫:mysql、oracle等,保存數(shù)據(jù)量大。 非關(guān)系型數(shù)據(jù)庫:Mongodb、R

    2024年02月09日
    瀏覽(23)
  • 【Python】導(dǎo)入Excel數(shù)據(jù)表的幾種方式

    如何導(dǎo)入csv、xlsx格式的Excel; 一張數(shù)據(jù)表里有多個sheet頁,如何獲取所有sheet頁名字,并導(dǎo)入每張sheet頁; 1. 導(dǎo)入CSV格式的Excel表: 2. 導(dǎo)入xlsx格式的Excel表: 如果Excel表里只有一個sheet頁: 如果Excel表里有多個sheet頁: 如果Excel表里sheet頁過多:

    2024年02月03日
    瀏覽(25)
  • 從mysql 數(shù)據(jù)庫表導(dǎo)入數(shù)據(jù)到elasticSearch的幾種方式

    從mysql 數(shù)據(jù)庫表導(dǎo)入數(shù)據(jù)到elasticSearch的幾種方式

    ????????從MySQL數(shù)據(jù)庫導(dǎo)入數(shù)據(jù)到Elasticsearch有幾種方式,主要包括以下幾種: ????????1. 使用Logstash: ????????Logstash是一個開源的數(shù)據(jù)收集引擎,可以用來從不同的數(shù)據(jù)源導(dǎo)入數(shù)據(jù)到Elasticsearch。它具有強大的數(shù)據(jù)處理能力和插件生態(tài)系統(tǒng),可以方便地實現(xiàn)數(shù)據(jù)的解

    2024年04月12日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包