SQL數(shù)據(jù)庫(kù)中的各種類型表
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
作為一名數(shù)據(jù)分析師,我們?cè)跀?shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)分析查詢的時(shí)候,會(huì)有挺多不同的表結(jié)構(gòu),有寬表、窄表、全量表、增量表、快照表、流水表等等,那具體是什么意思,接下來我們逐一進(jìn)行介紹。 一、寬表與窄表 寬表,顧名思義,就是字段列比較多的 數(shù)據(jù)庫(kù)表,長(zhǎng)的有上百列、幾百列字段,短的也會(huì)至少有幾十個(gè)字段,它是把不同數(shù)據(jù)庫(kù)表、不同維度、屬性關(guān)聯(lián)的字段放在統(tǒng)一歸到一張大表里面存儲(chǔ),這種類型的表的好處是信息較為全面和完整,這也意味著有提供更多的業(yè)務(wù)價(jià)值,便捷數(shù)據(jù)分析人員查詢,提高查詢性能,那寬表既然說的有這么好,那是不是數(shù)據(jù)庫(kù)都要去設(shè)計(jì)成寬表呢?答案是否定的,寬表也會(huì)有不好的地方,首先它接入較多維度的數(shù)據(jù),會(huì)造成數(shù)據(jù)維度更細(xì),數(shù)據(jù)列有大量重復(fù)數(shù)據(jù),占用較多的存儲(chǔ)空間。此外如果業(yè)務(wù)需求稍微有變化,那就需要重新設(shè)計(jì)另外一張新的寬表,造成寬表的復(fù)用度降低且靈活性也就變得較差,后續(xù)系統(tǒng)的開發(fā)效率也較低。如果只考慮數(shù)據(jù)僅僅是滿足業(yè)務(wù)目標(biāo)服務(wù),就缺少了對(duì)過程的思考與建設(shè),也就是陷入到比較極端的開發(fā)狀態(tài)中,所以要盡量以最低的開發(fā)成本滿足多樣的業(yè)務(wù)需求,所以寬表也是把雙刃劍。 比如物流倉(cāng)儲(chǔ)的全鏈路報(bào)表,從店鋪訂單生成、倉(cāng)庫(kù)生產(chǎn)波次響應(yīng)、出庫(kù)單生成、打單、復(fù)核、包裝、出庫(kù)、退貨等環(huán)節(jié)數(shù)據(jù)。快遞全鏈路報(bào)表,從電商平臺(tái)下單、流轉(zhuǎn)、攬收、交件、轉(zhuǎn)運(yùn)、分發(fā)、簽收、退改等操作掃描節(jié)點(diǎn)以及對(duì)應(yīng)維度明細(xì)數(shù)據(jù)全部囊括。 窄表就是單獨(dú)存儲(chǔ)某一類型的字段表,就拿物流倉(cāng)儲(chǔ)報(bào)表舉例,比如有商品基本信息表,包含商品編碼、商品名稱、商品的長(zhǎng)、高、寬、體積、重量等等,還有倉(cāng)儲(chǔ)SKU表,存儲(chǔ)了包括SKU_ID號(hào)、商品的類型、商品的款式、商品的顏色等字段,還有出庫(kù)單表,存儲(chǔ)了包括平臺(tái)訂單號(hào),付款時(shí)間,出庫(kù)單類型,店鋪名稱,店鋪編碼,出庫(kù)單號(hào), 運(yùn)單號(hào), 出庫(kù)時(shí)間, 倉(cāng)庫(kù)編碼,出庫(kù)件數(shù),是否預(yù)售等等字段。 二、全量表與增量表 全量表顧名思義就是存儲(chǔ)了全部數(shù)據(jù)的表,但它是記錄更新周期內(nèi)的全量數(shù)據(jù),無論數(shù)據(jù)是否有變化都需要記錄。所有全量表有這么些特征,它是存儲(chǔ)當(dāng)前最新狀態(tài)的全部數(shù)據(jù),無論是變化的或沒有變化的;其次它是沒有分區(qū)的,所有數(shù)據(jù)都存儲(chǔ)在一個(gè)分區(qū)中,每次往全量表里寫的數(shù)據(jù)都會(huì)覆蓋原來的數(shù)據(jù),所以全量表他是不記錄歷史數(shù)據(jù)的,只有截止到當(dāng)前最新的、全量的數(shù)據(jù)。如下示例,假設(shè)001、002用戶分別在1.12、1.13號(hào)生成了2個(gè)訂單取消動(dòng)作,在1.13號(hào)新增了003用戶生成的新訂單和1.13號(hào)001用戶又重新下了單并完成支付。
增量表就是記錄更新周期內(nèi)的新增數(shù)據(jù),即在原表中數(shù)據(jù)的基礎(chǔ)上新增本周期內(nèi)產(chǎn)生的新數(shù)據(jù),沒變化的數(shù)據(jù)不會(huì)被記錄,它有這么些特征,記錄每次增加的量,而不是總量,增量表是每次把新增的數(shù)據(jù)追加到原表中,存在分區(qū),增量表中每次新增的數(shù)據(jù)每次單獨(dú)存儲(chǔ)在一個(gè)分區(qū)中,歷史分區(qū)中產(chǎn)生的數(shù)據(jù)記錄不發(fā)生變化。如下示例,假設(shè)用戶001在1.12號(hào)取消了個(gè)訂單,然后在1.13號(hào)的時(shí)候又新增了個(gè)訂單id, 所以存儲(chǔ)在1.13號(hào)的分區(qū)中,歷史的1.12的數(shù)據(jù)是不發(fā)生變化的。 增量表中的分區(qū)時(shí)間是T日,實(shí)際代表第T日,快照表中時(shí)間分區(qū)T日,實(shí)際代表第T+1日,比如快照表中2.13號(hào)分區(qū)和2.12號(hào)分區(qū)實(shí)際分別對(duì)應(yīng)2.14號(hào)和2.13號(hào),它倆的數(shù)據(jù)相減就是實(shí)際時(shí)間2.13號(hào)到2.14號(hào)之間變化、增減的數(shù)據(jù),也就是增量表里面2.13號(hào)分區(qū)的數(shù)據(jù)。
三、快照表、流水表和拉鏈表 快照表,可以你把想象成一個(gè)照相機(jī),比如每年除夕全家人在那個(gè)時(shí)點(diǎn)拍個(gè)全家福,你每年那個(gè)時(shí)點(diǎn)拍一張,各年時(shí)點(diǎn)拍照匯集成的圖片成為一個(gè)"年度照片集", 如1992年拍了一張,那這一年的快照就是保存了這一張,到了1993年除夕又拍了一張全家福照片,同時(shí)這一天又對(duì)1992的全家福照片做了圖片顏色處理,那就新增了一張照片,那么對(duì)應(yīng)到1993年的快照就有了3張全家福照片。那對(duì)應(yīng)到數(shù)據(jù)庫(kù)也是一樣,它也是截取過去某個(gè)時(shí)間的數(shù)據(jù),一般是以天為一個(gè)時(shí)點(diǎn),每個(gè)快照的數(shù)據(jù)單獨(dú)存儲(chǔ)在一個(gè)分區(qū)中,比如庫(kù)存快照表就是這樣,每天的0點(diǎn)過后,自動(dòng)生成包括昨天在內(nèi)的歷史所有店鋪對(duì)應(yīng)倉(cāng)庫(kù)所待售的庫(kù)存數(shù)據(jù)。快照表的典型特征是按照時(shí)間分區(qū)進(jìn)行數(shù)據(jù)存儲(chǔ),并存儲(chǔ)過去歷史到現(xiàn)在的分區(qū)數(shù)據(jù)。 流水表,它是對(duì)于表的每一個(gè)修改都會(huì)被記錄,可以用于反映實(shí)際記錄的變更,它的典型特征是存儲(chǔ)了所有修改記錄的表,它與拉鏈表也有類似,不同的拉鏈表可以根據(jù)拉鏈粒度存儲(chǔ)數(shù)據(jù),也就是存儲(chǔ)特定維度的數(shù)據(jù)變化記錄,而流水表存儲(chǔ)的是每一個(gè)修改記錄。 拉鏈表,是一種維護(hù)歷史狀態(tài)以及歷史最新數(shù)據(jù)的表,記錄從開始到現(xiàn)在的一張表, 它包含過去和現(xiàn)在的記錄,一般通過增加start_date開始日期、end_date結(jié)束日期或vld_tm生效日期、ivld_tm失效日期。比如倉(cāng)庫(kù)基礎(chǔ)信息表,存儲(chǔ)物流倉(cāng)庫(kù)的名稱、編碼、面積、省份、城市、具體地理位置、倉(cāng)庫(kù)負(fù)責(zé)人、開始運(yùn)營(yíng)時(shí)間、結(jié)束運(yùn)營(yíng)時(shí)間。比如快遞里面的機(jī)構(gòu)表,可以儲(chǔ)存機(jī)構(gòu)編碼、機(jī)構(gòu)上級(jí)編碼、機(jī)構(gòu)所屬省份、機(jī)構(gòu)所屬市、機(jī)構(gòu)所屬區(qū)縣、機(jī)構(gòu)類別、主分撥中心、生效時(shí)間、失效時(shí)間、修改日期等。如下列的倉(cāng)庫(kù)基礎(chǔ)信息拉鏈表,蘇州吳江倉(cāng)在2021年1月3日開始運(yùn)營(yíng),在2023年12月31日可能因?yàn)榘徇w、改造等原因結(jié)束運(yùn)營(yíng),之后在2024年1月1日又重新開始運(yùn)作,則在新增數(shù)據(jù)庫(kù)表中添加新記錄,那拉鏈表對(duì)歷史的記錄也會(huì)有更新,同時(shí)保留歷史記錄,對(duì)應(yīng)的也新增維護(hù)一條記錄。
四、臨時(shí)表與切片表 我們?cè)诓樵儚?fù)雜數(shù)據(jù)需求的時(shí)候,編寫Sql腳本的時(shí)候,需要用到嵌套關(guān)聯(lián)多張表取數(shù),很多表需要建立中間表,也就是臨時(shí)虛擬表,一般通過With as來建立臨時(shí)表,建立臨時(shí)表的這部分查詢?cè)谕粋€(gè)程序中只執(zhí)行一次,并將查詢結(jié)果存儲(chǔ)在用戶的臨時(shí)空間中,可以被多次使用,直到整個(gè)程序結(jié)束。
切片表的話是一種數(shù)據(jù)表結(jié)構(gòu),他是根據(jù)基礎(chǔ)表的某一維度進(jìn)行劃分的數(shù)據(jù)表,主要作用就是對(duì)數(shù)據(jù)進(jìn)行分組、篩選、切片等操作,跟Excel表數(shù)據(jù)透視模塊的切片表類似,比如根據(jù)時(shí)間維度創(chuàng)建切片表,汽車銷售數(shù)據(jù)那會(huì)根據(jù)不同的時(shí)間段,如日或周維度進(jìn)行切分,某電商平臺(tái)將一天24小時(shí)按1小時(shí)或更小維度分鐘來進(jìn)行切分,對(duì)應(yīng)行的交易流水?dāng)?shù)據(jù);還有根據(jù)訂單來源進(jìn)行切片,如根據(jù)淘寶、拼多多、抖音、快手、得物、唯品會(huì)、京東等平臺(tái)渠道來進(jìn)行切分。 五、事實(shí)表與維度表 在數(shù)據(jù)倉(cāng)庫(kù)中,維度表是一類與事實(shí)表相關(guān)的表格,主要用于對(duì)事實(shí)表中的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)、分析和報(bào)表生成。在數(shù)倉(cāng)中,維度表用于描述事實(shí)表中的各個(gè)維度的屬性信息。通常使用維度對(duì)事實(shí)表中的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)、聚合計(jì)算。如訂單狀態(tài)下,維度表主要包括了從支付、發(fā)貨、交付和評(píng)價(jià)等多種狀態(tài),如倉(cāng)庫(kù)操作動(dòng)作節(jié)點(diǎn)下,包括收貨入庫(kù)、核驗(yàn)、上架、揀選、移庫(kù)、復(fù)核、出庫(kù)等掃描類型,維度表是對(duì)具體數(shù)字代碼的信息描述及狀態(tài)碼。
在事實(shí)表是存儲(chǔ)與業(yè)務(wù)對(duì)象相關(guān)的數(shù)據(jù)的主表,根據(jù)數(shù)據(jù)的生命周期和特點(diǎn),數(shù)據(jù)倉(cāng)庫(kù)中的事實(shí)表可以分為不同類型,也稱周期快照事實(shí)表、累積快照事實(shí)表,主要用于記錄與業(yè)務(wù)對(duì)象相關(guān)的事務(wù)性數(shù)據(jù),如電商平臺(tái)交易流水、出入庫(kù)數(shù)據(jù)等,記錄某個(gè)時(shí)間段內(nèi)的業(yè)務(wù)數(shù)據(jù)度量和狀態(tài)度量的變化。周期性通常以年、月、周、日等為單位進(jìn)行統(tǒng)計(jì),與周期快照事實(shí)表不同,累積快照事實(shí)表沒有確定的周期,而是針對(duì)一個(gè)業(yè)務(wù)對(duì)象完全覆蓋一個(gè)事實(shí)的生命周期進(jìn)行記錄,如快運(yùn)運(yùn)單的不同操作時(shí)點(diǎn)的數(shù)據(jù)記錄。 該文章在 2024/3/15 15:15:45 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |