本文將為您介紹,Hologres在開發過程中的相關規范,幫助您快速了解Hologres的開發要求,避免進行錯誤的操作。
數據域規范
數倉分層
數據倉庫以分層建設為主包含如下幾類分層,其中CDM包含DWD、DWS、DIM。在Hologres中通過Schema隔離不同的分層。
ODS(Operational Data Store):操作數據層
CDM(Common Data Model):公共維度模型層
DWD(Data Warehouse Detail):明細數據層
DWS(Data Warehouse Summary):匯總數據層
DIM(Dimension):維度數據層
ADS(Application Data Service):應用數據層
不同公司可根據業務的復雜程度選擇適當的顆粒度,如一個公司存在多個BU(Business Unit),則以BU縮寫作為Schema的前綴。
create schema ${bu}_ads; create schema ${bu}_ads_dev; create schema ${bu}_dwd; create schema ${bu}_dwd_dev; create schema ${bu}_dws; create schema ${bu}_dws_dev; create schema ${bu}_dim; create schema ${bu}_dim_dev; create schema ${bu}_ods; create schema ${bu}_ods_dev;
數據域縮寫
不同的數據域需要定義共享的數據域代碼,形成公司共識規范。示例如下。
數據域的名稱
數據域對應的縮寫示例
交易域
trd
商品域
itm
日志域
log
會員和店鋪域
mbr
供銷存管理域
dst
銷售和客服域
crm
信用和風控域
rsk
工具和服務域
tls
物流和快遞域
lgt
命名規范
任務命名規范
任務命令時要區分內部任務還是同步任務,命名規則如下。
內部SQL任務(非同步任務):
holo_{target_table_name}
(與外部表任務區分)。數據導入Hologres:
{source}2holo_{target_table_name}
。Hologres數據導出:
holo2{target}_{target_table_name}
。
表命名規范
分層名稱
當前分層中表的命名規則
示例
DWD
${bu}_dwd.數據域_業務過程_[自定義詞根]_后綴
taobao_dwd.trd_ord_flow
DWS
${bu}_dws.數據域_數據粒度縮寫_業務過程_[{自定義詞根}]_統計時間周期
taobao_dws.trd_all_dtr,taobao_dws.log_slr_pv_dtr
DIM
${bu}_dim.{維度定義}[_{自定義詞根}]
taobao_cdm.dim_itm
ADS
${bu}_ads.業務域_維度_[{自定義詞根}]_{刷新周期標識}
說明刷新周期標識如下。
d:按天刷新。
r:實時刷新。
h:準實時刷新。
taobao_ads.trd_cate_d
Table Group命名規范
若是業務需要創建多個Table Group,命名可以采取
${bu}_{數倉分層名}_{業務定義}_tg
的規范。視圖命名規范
持久化視圖命名規則與示例如下。
規則
DWS:
${bu}_dws.數據域_數據粒度縮寫_業務過程_[{自定義詞根}]_統計時間周期_v
。ADS:
${bu}_ads.業務域_維度_[{自定義詞根}]_{刷新周期標識}_v
。
示例
taobao_dws.trd_byr_itm_ord_cm_v
外表命名規范
在原有MaxCompute表名基礎下加
ext
后綴,具體示例如下。taobao_dim.camp_ext
臨時表命名規范
在原有表名基礎下加
tmp
前綴及數字序號后綴,具體示例如下。taobao_dim.tmp_camp_01
常用縮寫詞
統計周期
縮寫
最近一天
1d
最近多天
nd
累計
td
自然周
cw
自然月
cm
截止當前累計
dtr
截止當前小時累計
dhr
表開發規范
內表規范
創建表之前必須按照數據模型規范確定表和字段的命名,并根據需求確認表的生命周期,為表和字段添加完整注釋,相關規范如下。
強控規范(如不符合則不允許發布):
輸出的表與字段需包含Comment,適用于全平臺數據研發操作場景,表的Comment應確保描述信息簡練、清晰。
建表語句中需包含有表的生命周期(time_to_live_in_seconds)。
建表語句需帶有分布鍵索引(distribute_key),分布鍵選擇原則如下。
足夠分散、最常JOIN或者GROUP BY的字段。例如買家商品表,可以設置user_id和item_id,但如果常關聯的KEY為user_id,則分布鍵設置user_id而非user_id和item_id。
進行關聯查詢的表需要創建在同一個Table Group中。
同一個實體ID,在所有事實表和維表中保持名稱和數據類型一致,比如交易表中用戶ID為user_id,在維表中也為user_id,而不能是uid,同時數據類型保持一致,減少數據類型的轉換。
所有物理表的分區字段默認使用
ds
表示。
建議規范:
建表語句應當帶有bitmap_columns、segment_key、cluster_key任意之一。
在不明確字段基數情況下,不建議設置建表屬性
dictionary_encoding_columns
(字典索引),您可調用如下內容將屬性置空。call set_table_property('table_name', 'dictionary_encoding_columns','')
建表屬性orientation(數據存儲格式)建議使用column,可以設置為row。
說明除非明確該表的查詢能夠始終指定所有的primary key(等于或者in),否則盡量不要使用row,不設置時默認是用column存儲。
建表屬性bitmap_columns(比特編碼),bitmap可以對存儲文件內部的數據進行快速過濾。
建議把filter條件的數據建成bitmap_columns,默認情況下會將所有的TEXT字段設置。
不建議枚舉值過多的字段,比如user_id,建議活動ID這類指標設置為bitmap_columns。
建表屬性event_time_column需用在與實時寫入有關的字段上,例如事件時間戳。
建表屬性clustering_key聚簇索引,Hologres會在聚簇索引上對數據進行排序,建立聚簇索引能夠加速在索引列上的range和filter查詢,僅能設置一組。對于范圍過濾適用,比如gmv分檔時。
MaxCompute外表規范
Hologres支持通過外表對MaxCompute進行加速查詢,可簡化數據同步的流程。為了提升計算性能,非必要場景不建議您使用內表與外表關聯。為更好地管理和維護外表,請遵循如下規范。
強控規范:您需嚴格按照外表命名規范,在原有的MaxCompute表名基礎下增加
ext
后綴。建議規范:
保留外表的DDL,做好版本之間的管理。
不建議內表與外表關聯使用,建議采用外表同步至內表的方式。
視圖規范
強控規范:您需嚴格按照視圖命名規范。
建議規范:
建議您開啟任務調度,保障后續開發作業依賴鏈路完整。
建議不同粒度的視圖單獨創建,避免綜合請求計算量過大。
例如,cw、cm、nd、1d等,可分別建立4個視圖。如存在分端,則建立pc、wap、app。如分采集方式,可以分ut和非ut。
生命周期(僅限內表)規范
數倉分層
對應的生命周期規則描述
DWD
天級增量明細,建議不超過2年。
DWS
天級增量明細,建議不超過2年。
DIM
大維表建議進行極限存儲建模后永久保存,小維表與MaxCompute表保持一致。
大、小維表的界定標準:單分區不可超過1 TB。
建議規范:
若是有分區表,建議按照實時任務寫入當天分區,并且按照數倉分層設置合適的TTL,且更新的歷史數據不應該寫入已經超過TTL設置的分區。
Table Group規范(可選)
每個數據庫都會有默認的Table Group和Shard數,您可以根據業務需要新建Table Group或者修改Shard數,以此達到更好的性能,建議規范如下。
如無必要不要新建Table Group。
數據量較大的表,可獨立新建Shard數較大的Table Group。
有大量數據量較小的表,可適當創建一個Shard數較小的Table Group。
需要Join關聯查詢的表,必須放在同一個Table Group。
字段開發規范
字段類型規范
字段類型需嚴格按照如下要求進行創建。
字段/字段后綴
字段注釋
示例
縮寫
user_id
自增會員ID
user_id=232442843
int8
item_id
商品ID
item_id=63283278784383
int8
member_id
注冊會員ID
member_id=b2b-dsajk2343821b
TEXT
*amt*
金額類
pay_ord_amt_1d_001=923.23
NUMERIC
*fee*
費用類
post_fee=923.23
NUMERIC
*cnt*
數量類
pay_ord_byr_cnt_1d_001=923
int4/int8
is_*
是否類
is_pm=Y/is_pm=true
TEXT/BOOL
ds
分區
ds=20210120
YYYYMMDD
基本數據類型參考
目前,Hologres數據類型與PostgreSQL數據類型兼容,但支持的數據類型是PostgreSQL的一個子集。詳細字段類型及MaxCompute映射,請參見數據類型匯總。
貨幣單位及精度
中國內地地域貨幣單位統一為人民幣,其他地域貨幣單位統一為美元。除非模型有特殊說明,否則金額相關的數據不做任何四舍五入操作,以免后續匯總計算中造成不同口徑的匯總結果不一致。
SQL規范
強控規范:
SQL最外層及子查詢內層不需要計算的字段禁止使用
select *
操作,所有操作必須明確指定列名。Where條件中空字段和空字符串要進行必要的Coalesce處理。
建議規范:
常采用count distinct字段作為distribution_key,對于多個count distinct的組合需要手動的改寫。
select count(distinct userid) , count(distinct case when stat_date = '20201111' then userid end) from t group by cate_id; --改寫為如下 select count(1), sum(c) from ( select userid , cate_id , cast(count(case when stat_date = '20201111' then 1 end) > 0) as c from t group by cate_id, userid ) t1 group by cate_id;
離線調度任務增加analyze table操作分區表。
針對長周期使用場景,批操作時采用ATTACH/DETACH操作歷史分區,避免數據指標大起大落。