您好,登錄后才能下訂單哦!
MaxCompute 表設(shè)計(jì)規(guī)范有哪些,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
表的限制項(xiàng)
表(Table)設(shè)計(jì)規(guī)范 表設(shè)計(jì)主要目標(biāo)
分區(qū)字段和普通字段的選擇
分區(qū)字段定義依據(jù)
分區(qū)個(gè)數(shù)定義依據(jù)
分區(qū)數(shù)量和數(shù)據(jù)量建議
按數(shù)據(jù)分層規(guī)范數(shù)據(jù)生命周期
按數(shù)據(jù)的變更和歷史規(guī)范數(shù)據(jù)的保存
表設(shè)計(jì)的影響
表設(shè)計(jì)步驟
表數(shù)據(jù)存儲(chǔ)規(guī)范
數(shù)據(jù)導(dǎo)入通道與表設(shè)計(jì)
分區(qū)設(shè)計(jì)與邏輯存儲(chǔ)的對(duì)應(yīng)
表和分區(qū)設(shè)計(jì)基本規(guī)則
分區(qū)設(shè)計(jì)
cdn.com/a774991fbfcd827098aeed14ae60230b787b1fcd.png">
降低存儲(chǔ)成本。 合適的表設(shè)計(jì)可以在數(shù)據(jù)分層設(shè)計(jì)上降低冗余存儲(chǔ),減少中間表數(shù)據(jù)量大小。同時(shí)正 確的對(duì)表數(shù)據(jù)進(jìn)行生命周期管理,更能夠直接降低存儲(chǔ)的數(shù)據(jù)量以降低存儲(chǔ)成本。
降低計(jì)算成本。 對(duì)表設(shè)計(jì)規(guī)范化,以便在后續(xù)對(duì)表數(shù)據(jù)進(jìn)行查詢計(jì)算過程中,可以依據(jù)這些規(guī)范優(yōu)化 數(shù)據(jù)的讀取,減少計(jì)算過程中的冗余讀寫和計(jì)算,提升計(jì)算性能的同時(shí)降低成本。
降低維護(hù)復(fù)雜度。 規(guī)范化的表分層設(shè)計(jì)能夠直接體現(xiàn)業(yè)務(wù)的特點(diǎn)。如通過對(duì)數(shù)據(jù)通道中數(shù)據(jù)采集方式 進(jìn)行優(yōu)化,同時(shí)對(duì)表進(jìn)行規(guī)范化設(shè)計(jì),可以減少分布式系統(tǒng)中小文件的問題,同時(shí)也減少表和分區(qū)維 護(hù)的數(shù)量等復(fù)雜度。
影響的操作:表創(chuàng)建/入數(shù)據(jù)/表更新/表刪除/表管理。 導(dǎo)入數(shù)據(jù)場(chǎng)景(區(qū)分要做實(shí)時(shí)數(shù)據(jù)采集還是離線批 量數(shù)據(jù)寫入):
導(dǎo)入即查詢與計(jì)算。
多次導(dǎo)入,定時(shí)查詢與計(jì)算。
導(dǎo)入后生成中間表進(jìn)行計(jì)算。
注意:
合理的表設(shè)計(jì)和數(shù)據(jù)集成周期管理能夠使數(shù)據(jù)在存儲(chǔ)期間降低成本。 - MaxCompute優(yōu)先作為批量數(shù)據(jù)集成庫(kù)以及按業(yè)務(wù)邏輯進(jìn)行計(jì)算,如按照分區(qū)進(jìn)行計(jì)算。
導(dǎo)入后立即查詢與計(jì)算,需要考慮每次導(dǎo)入數(shù)據(jù)量,減少流式小量數(shù)據(jù)導(dǎo)入。
不合理的數(shù)據(jù)導(dǎo)入及存儲(chǔ)(小文件)會(huì)對(duì)整體存儲(chǔ)性能,計(jì)算性能,運(yùn)維穩(wěn)定性造成影響。
確定所屬項(xiàng)目空間,依據(jù)業(yè)務(wù)過程規(guī)劃表類型,屬于哪個(gè)數(shù)據(jù)層次。
定義表描述,權(quán)限定義與Owner定義。
依據(jù)數(shù)據(jù)量、數(shù)據(jù)集成特點(diǎn)定義分區(qū)表或者非分區(qū)表。
定義字段,或分區(qū)字段
表創(chuàng)建/表轉(zhuǎn)換
明確導(dǎo)入數(shù)據(jù)場(chǎng)景的相關(guān)因素(包括批量數(shù)據(jù)寫入/流式數(shù)據(jù)寫入/條式數(shù)據(jù)插入)。
定義表和分區(qū)數(shù)據(jù)生命周期。
注意:
表創(chuàng)建之后可以依據(jù)業(yè)務(wù)變化進(jìn)行表schema的修改,如設(shè)置生命周期,RangeClustering。
在設(shè)計(jì)階段需要特別注意區(qū)分?jǐn)?shù)據(jù)的場(chǎng)景(批量數(shù)據(jù)寫入/流式數(shù)據(jù)寫入/周期性條式數(shù)據(jù)插入)。
合理使用非分區(qū)表和分區(qū)表。日志表,事實(shí)表,原始采集表等建議使用分區(qū)表,按照時(shí)間分區(qū)。
注意各種表和分區(qū)的限制條件。
源表ODS層: 每天從業(yè)務(wù)系統(tǒng)同步過來的數(shù)據(jù),全部保留,生命周期定義永久保存。以防備下游數(shù)據(jù) 受損時(shí)可以從ODS恢復(fù)。若ODS每天同步過來的是全量表,可以通過全表拉鏈的方式來壓縮存儲(chǔ)。
數(shù)據(jù)倉(cāng)庫(kù)(基礎(chǔ))層: 至少保留一份完整的全量數(shù)據(jù)(不必像ODS那樣冗余多份全量)??紤]到性能 因素,可以考慮拆表或者做分區(qū)。
數(shù)據(jù)集市層: 按需保留1~3年時(shí)?。數(shù)據(jù)集市的數(shù)據(jù)較容易生成,無需保留那么?時(shí)間的歷史數(shù)據(jù)
會(huì)變化數(shù)據(jù)怎么存:
客戶屬性、產(chǎn)品屬性天天變,將這些屬性的歷史變化情況記錄下來,以方便追溯某個(gè)時(shí)點(diǎn)的值。
在事實(shí)表里面冗余維表的字段,即把”事件發(fā)生時(shí)“的各種維度屬性值與該事件綁定起來。 比較方便使 用者,不需關(guān)聯(lián)多張表就可以用數(shù)據(jù),在數(shù)據(jù)應(yīng)用層使用。
用拉鏈表或者日快照的形式,記錄維表的變化情況。 比較方便數(shù)據(jù)加工者,數(shù)據(jù)結(jié)構(gòu)靈活,擴(kuò)展方 便,容易管理,且數(shù)據(jù)一致性更好。在數(shù)據(jù)基礎(chǔ)層使用。
通道類型:
Datahub ,規(guī)劃寫入的分區(qū)以及寫入流量的關(guān)系,做到64M commit一次。
數(shù)據(jù)集成或DataX,規(guī)劃寫入的表分區(qū)的頻率,做到64M commit一次,避免commit空目錄。 DTS,規(guī)劃寫入的表存量分區(qū)與增量分區(qū)的關(guān)系,做commit頻率設(shè)置。
Console (Run SQL or Tunnel upload),避免高頻小數(shù)據(jù)量文件的插入或者上傳。
SDK Run Sql之insert into,對(duì)表或者分區(qū)上傳時(shí)需要注意插入到分區(qū)后進(jìn)行小文件整理操作,避免 對(duì)一個(gè)分區(qū)或者非分區(qū)表插入多次,插入后需要merge。
注意:
MaxCompute導(dǎo)入數(shù)據(jù)的通道只有Tunnel SDK或者執(zhí)行SQL的Insert into,避免流式插入。
以上各通道本身均有自身邏輯進(jìn)行流式數(shù)據(jù)寫入, 批量數(shù)據(jù)寫入,周期調(diào)度寫入。
數(shù)據(jù)通道寫表或分區(qū)時(shí)需要注意將一次寫入的數(shù)據(jù)量控制在合理的值如64M以上。
如上圖,表一共m 個(gè)一級(jí)分區(qū),每個(gè)一級(jí)分區(qū)都會(huì)按時(shí)間存儲(chǔ)二級(jí)分區(qū),每個(gè)二級(jí)分區(qū)都會(huì)存儲(chǔ)所有的 列。 對(duì)分區(qū)進(jìn)行設(shè)計(jì)的注意事項(xiàng):
分區(qū)限制數(shù)量上限。
避免每個(gè)分區(qū)中只有少量數(shù)據(jù)。
按照分區(qū)條件查詢和計(jì)算。
避免每個(gè)分區(qū)中多次數(shù)據(jù)寫入。
所有的表、字段名要使用統(tǒng)一的命名規(guī)范。
要能夠區(qū)分該表的業(yè)務(wù)類型。
要能夠區(qū)分該表是“事實(shí)表”或“維度表”,“日志表”,“極限存儲(chǔ)表”(待發(fā)布功能)。
要能夠區(qū)分該表的實(shí)體信息。
不同表中具有相同業(yè)務(wù)含義的字段要定義統(tǒng)一的數(shù)據(jù)類型:
避免不必要的類型轉(zhuǎn)換。
分區(qū)設(shè)計(jì)及使用一般規(guī)則:
支持新增分區(qū),不支持新增分區(qū)字段。
單表支持分區(qū)數(shù)量為6萬。
對(duì)于多級(jí)分區(qū)的表,如果想添加新的分區(qū),必須指明全部的分區(qū)值。
不支持修改分區(qū)列列名,只能修改分區(qū)列對(duì)應(yīng)的值。修改多級(jí)分區(qū)的一個(gè)或者多個(gè)分區(qū)值,多級(jí) 分區(qū)的每一級(jí)的分區(qū)值都必須寫上。
分區(qū)字段的作用:
方便數(shù)據(jù)的管理 。
劃分?jǐn)?shù)據(jù)掃描范圍。
創(chuàng)建表的時(shí)候,可以設(shè)置普通字段和分區(qū)字段。在絕大多數(shù)情況下,可以把普通字段理解成數(shù)據(jù)文件的數(shù) 據(jù),而分區(qū)字段可以理解成文件系統(tǒng)的目錄。表的存儲(chǔ)空間的占用是普通字段的空間占用。
分區(qū)列雖然不直接存儲(chǔ)數(shù)據(jù),但是如同文件系統(tǒng)里的目錄,方便數(shù)據(jù)管理,同時(shí)在計(jì)算時(shí)若指定具體的分
區(qū),計(jì)算過程中只查詢對(duì)應(yīng)分區(qū),從而減少計(jì)算輸入量。
分區(qū)表的分區(qū)列的個(gè)數(shù)不能超過6級(jí),也可以理解成底層存儲(chǔ)數(shù)據(jù)的目錄層數(shù)不能超過6層。對(duì)分區(qū)表設(shè)置
合適的生命周期,可以按照分區(qū)細(xì)粒度做到對(duì)部分?jǐn)?shù)據(jù)進(jìn)行周期管理。
注意:
可以從數(shù)據(jù)管理范圍和常用的數(shù)據(jù)掃描范圍考慮將對(duì)應(yīng)字段設(shè)置成分區(qū)字段。
對(duì)于不具備規(guī)律或者類型數(shù)量大于10000且不經(jīng)常作為查詢條件的字段設(shè)置成普通字段。
按優(yōu)先級(jí)高低排序:
區(qū)列的選擇應(yīng)充分考慮時(shí)間因素,盡量避免對(duì)于存量分區(qū)進(jìn)行更新。
如果有多個(gè)事實(shí)表(不包括維度表)進(jìn)行join,查詢條件where范圍的列作為分區(qū)列。 選
擇group by 或distinct 包含的列作為分區(qū)列。
選擇值分布均勻的列,不要選擇分區(qū)傾斜的列作為分區(qū)列。
常用SQL包含某列的等值或in查詢條件,選擇該列作為分區(qū)列。
例如:
Select ... from table where id=123 and ....;
時(shí)間分區(qū):可按天進(jìn)行分區(qū)或者按月進(jìn)行分區(qū),如按照小時(shí)進(jìn)行分區(qū),二級(jí)分區(qū)平均數(shù)量不應(yīng)大于8 個(gè)。
地域分區(qū):省,市,縣進(jìn)行分區(qū),考慮進(jìn)行多級(jí)分區(qū)。23個(gè)省,5個(gè)自治區(qū),4個(gè)直轄市,2個(gè)特別行 政區(qū);50個(gè)地區(qū)(州、盟);661個(gè)市,其中:直轄市4個(gè);地級(jí)市283個(gè);縣級(jí)市374個(gè);1636個(gè)縣(自治縣、旗、自治旗、特區(qū)和林區(qū)),按照最細(xì)粒度縣級(jí)進(jìn)行分區(qū)后更細(xì)粒度不應(yīng)再按照小時(shí)進(jìn)行 分區(qū)。
單分區(qū)下的數(shù)據(jù)建議64M數(shù)據(jù)提交一次。如果為多級(jí)分區(qū),保證每個(gè)最細(xì)粒度級(jí)分區(qū)下的二級(jí)分區(qū)的 數(shù)據(jù)都是按照這個(gè)規(guī)則。
單表分區(qū)數(shù)(包括下級(jí)分區(qū))不能超過6萬。
在計(jì)算的時(shí)候可以使用分區(qū)裁剪是分區(qū)的優(yōu)勢(shì)。
建議單個(gè)分區(qū)中數(shù)據(jù)量不要太大,如可以單個(gè)分區(qū)中數(shù)據(jù)在1萬條,但是建了5萬個(gè)分區(qū)。
應(yīng)盡量避免分區(qū)數(shù)據(jù)傾斜,單個(gè)表不同分區(qū)的數(shù)據(jù)量差異查過100萬以上。
做分區(qū)設(shè)計(jì)時(shí)應(yīng)合理規(guī)劃分區(qū)個(gè)數(shù),較細(xì)粒度的分區(qū)在跨分區(qū)掃描時(shí)會(huì)影響到SQL的執(zhí)行性能。
單個(gè)分區(qū)中數(shù)據(jù)量較大的情況下,MaxCompute執(zhí)行任務(wù)時(shí)會(huì)做分片處理不影響分區(qū)裁剪的優(yōu)勢(shì)。
單個(gè)分區(qū)中文件數(shù)較多時(shí),會(huì)影響MaxComputeInstance數(shù)量,造成資源浪費(fèi)和SQL性能的影響。
采用多級(jí)分區(qū),先按日期分區(qū),然后按交易類型分區(qū)。
拆表,一種交易類型就獨(dú)立成一張表,再每張表按日期分區(qū)。
維度表不做分區(qū)。
看完上述內(nèi)容,你們掌握MaxCompute 表設(shè)計(jì)規(guī)范有哪些的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。