阿里云离线数据仓库
阿里云離線數據倉庫
- 第1章 數據倉庫概念
- 第2章 項目需求及架構設計
- 2.1 項目需求分析
- 2.2 阿里云技術框架
- 2.2.1 技術選型
- 2.2.2 系統數據流程設計
- 第3章 數據生成模塊
- 3.1 埋點數據基本格式
- 3.2 事件日志數據
- 3.2.1 商品列表頁(loading)
- 3.2.2 商品曝光(display)
- 3.2.3 商品詳情頁(newsdetail)
- 3.2.4 購物車(cart)
- 3.2.5 廣告(ad)
- 3.2.6 消息通知(notification)
- 3.2.7 評論(comment)
- 3.2.8 收藏(favorites)
- 3.2.8 點贊(praise)
- 3.2.10 錯誤日志(error)
- 3.3 啟動日志數據(start)
- 第4章 數據采集模塊
- 4.5 Flume安裝及使用
- 4.6 DataHub安裝及使用
- 4.6.1 DataHub 簡介
- 4.8 DataWorks 和 MaxCompute
- 4.8.1 簡介
- 第5章 用戶數據行為數倉搭建
- 5.1 數倉分層概念
- 5.1.1 數倉分層
- 5.1.2 數倉分層優點
- 5.1.3 數倉命名規范
- 5.5 DataHub 推送數據到MaxCompute
- 5.6 明細數據層(DWD層)
- 5.6.1 日志格式分析
- 5.6.2 自定義UDTF(解析具體事件字段)
- 5.6.5 數據導入腳本
- 5.7.3 數據導入腳本
- 5.8 應用數據層(ADS層)
- 第6章 業務數倉理論
- 6.1 表的分類
- 6.1.1 實體表
- 6.1.2 維度表
- 6.1.3 事務型事實表
- 6.1.4 周期型事實表
- 6.2 同步策略
- 6.2.1 實體表同步策略
- 6.2.2 維度表同步策略
- 6.2.3 事務型事實表同步策略
- 6.2.4 周期型事實表同步策略
- 第7章 業務數倉搭建
- 7.1 業務數倉架構圖
- 7.2 RDS 服務器準備
- 7.2.1 RDS 服務器購買
- 7.5.3 每日增量表同步
- 7.5.4 每日新增及變化表同步
- 7.6 DWD層
- 7.6.2 手動將數據導入 DWD 層
- 7.7 DWS層
- 7.8 ADS層
- 第8章 數據導出與作業調度
- 8.1 創建結果數據庫
- 8.2 創建商品銷售數據同步節點
- 第9章 數據可視化
第1章 數據倉庫概念
第2章 項目需求及架構設計
2.1 項目需求分析
2.2 阿里云技術框架
2.2.1 技術選型
2.2.2 系統數據流程設計
第3章 數據生成模塊
3.1 埋點數據基本格式
3.2 事件日志數據
3.2.1 商品列表頁(loading)
3.2.2 商品曝光(display)
事件標簽:display
3.2.3 商品詳情頁(newsdetail)
事件標簽:newsdetail
3.2.4 購物車(cart)
事件名稱:cart
3.2.5 廣告(ad)
事件名稱:ad
3.2.6 消息通知(notification)
事件標簽:notification
3.2.7 評論(comment)
評論表標簽:comment
3.2.8 收藏(favorites)
收藏標簽:favorites
3.2.8 點贊(praise)
點贊標簽:praise
3.2.10 錯誤日志(error)
錯誤日志標簽:error,幫助發現問題,進行改善提升。
3.3 啟動日志數據(start)
啟動日志標簽:start
第4章 數據采集模塊
4.5 Flume安裝及使用
Flume 是 Cloudera 提供的一個高可用的,高可靠的,分布式的海量日志采集、聚合和傳輸的系統。Flume 基于流式架構,靈活簡單。
4.6 DataHub安裝及使用
4.6.1 DataHub 簡介
DataHub 輸入組件包括
Flume:主流的開源日志采集框架。
DTS:類似 Canal,日志實時監控采集框架。
Logstash:也是日志采集框架,通常和 Elasticsearch、Kibana 集合使用。
Fluentd:Fluentd 是一個實時開源的數據收集器。
OGG:實時監控 Oracle 中數據變化。
DataHub 輸出組件包括
RDS:類似于傳統 MySQL 數據庫。
DB:面向分析型的分布式數據庫。
MaxCompute:離線分析框架。
Elasticsearch:數據分析,倒排索引。
StreamCompute:實時分析框架。
TableSotre:類似于 Redis,KV 形式存儲數據。
OSS:類似于 HDFS,存儲圖片,視頻。
4.8 DataWorks 和 MaxCompute
4.8.1 簡介
MaxCompute(大數據計算服務)是阿里巴巴自主研發的海量數據處理平臺,主要提供數據上傳和下載通道,提供 SQL 及 MapReduce 等多種計算分析服務,同時還提供完善的安全解決方案。
DataWorks(數據工場,原大數據開發套件)是基于 MaxCompute 計算引擎的一站式大數據工場,它能幫助您快速完成數據集成、開發、治理、服務、質量、安全等全套數據研發工作。
圖27-1:37
盤古:分布式文件系統,相當于Hadoop 中的 HDFS。
伏羲:分布式調度系統,相當于Hadoop 中的 YARN。
MaxCompute Engine:統一計算引擎,相當于MR、Tez等計算引擎。
MaxCompute 和 DataWorks 一起向用戶提供完善的ETL 和數倉管理能力,以及 SQL、MR、Graph 等多種經典的分布式計算模型,能更快速地解決用戶海量數據計算問題,有效降低企業成本,保障數據安全。
第5章 用戶數據行為數倉搭建
5.1 數倉分層概念
5.1.1 數倉分層
圖29-1:37
5.1.2 數倉分層優點
5.1.3 數倉命名規范
- ODS層命名為ods前綴。
- DWD層命名為dwd前綴。
- DWS層命名為dws前綴。
- ADS層命名為ads前綴。
- 維度表命名為dim前綴。
- 每日全量導入命名為df(day full)后綴。
- 每日增量導入命名為di(day increase)后綴。
5.5 DataHub 推送數據到MaxCompute
之前 Flume 中的數據利用 DataHub Sink 把數據寫入到了 DataHub 中,DataHub 中提供了很多的其他第三方的 DataConnector 可以連接各種例如:MaxCompute,ElasticSearch,ADB,RDS等數據庫。
所以就要建立 DataConnector 把數據推送到 MaxCompute 中。
5.6 明細數據層(DWD層)
DWD 層主要是對ODS層數據進行清洗(去除空值,臟數據,超過極限范圍的數據)。DWD 層處理后的表,能夠成為非常明確可用的基礎明細數據。
5.6.1 日志格式分析
1)日志格式:服務器時間 | json
2)其中 json 包括:
cm:公共字段的 key;
ap:app 的名稱;
et:具體事件。
5.6.2 自定義UDTF(解析具體事件字段)
開發 UDTF 有兩個方法:
- 方法1:在本地 IDEA 中創建工程,開發代碼,打包,把 JAR 上傳到 DataStudio 成為資源 JAR 包。然后基于資源 JAR 包,聲明函數。
- 方法2:直接在 FunctionStudio 中開發,然后在線打包發布程序,聲明函數。相比而言,從發布流程上來說,利用 FunctionStudio 更快捷方便。但是從 IDEA 開發角度來說,網頁版本的 FunctionStudio,肯定不如客戶端的功能強大、反應速度流暢。不多也可以兩者配合起來使用。
p34:未詳細學習。
5.6.5 數據導入腳本
1)在流程中加入一個數據開發腳本
去重有兩種方式:
1.按照某一個字段進行 group by;
2.開窗函數。
向 dws_uv_detail_d 表中插入數據,數據來源于一個子查詢;
子查詢里是一個開窗,對于 mid(設備id)進行開窗,開窗之后只取第一條。
5.7.3 數據導入腳本
DWS 層一般圍繞某個主題進行聚合、拼接處理。
針對統計日活的需求,DWS 主要的工作就進行以日為單位的去重操作。
1)在流程中加入一個數據開發腳本
在數據開發中,新建一個ODPS SQL
圖39-00:18
5.8 應用數據層(ADS層)
統計各個渠道的 uv 個數
第6章 業務數倉理論
6.1 表的分類
6.1.1 實體表
實體表:一般是指一個實現存在的業務對象,比如用戶、商品、商家、銷售員等等。
6.1.2 維度表
維度表:一般是指對應一些業務狀態,編號的解釋表。也可以稱之為碼表。比如地區表,訂單狀態,支付方式,審批狀態,商品分類等等。
6.1.3 事務型事實表
事務型事實表:一般指隨著業務發生不斷產生的數據。特點是一旦發生不會再變化。一般比如:交易流水,操作日志,出庫入庫記錄等等。
6.1.4 周期型事實表
周期型事實表,一般指隨著業務發生不斷產生的數據。
與事務型不同的是,數據會隨著業務周期性的推進而變化。
比如訂單,其中訂單狀態會周期性變化。再比如,請假、貸款申請,隨著批復狀態在周期性變化。
6.2 同步策略
數據同步策略的類型包括:全量表、增量表、新增及變化表。
- 全量表:存儲完整的數據。
- 增量表:存儲新增加的數據。
- 新增及變化表:存儲新增加的數據和變化的數據。
6.2.1 實體表同步策略
實體表:比如用戶、商品、商家、銷售員等。
實體表數據量比較小:通常可以做每日全量,就是每天存一份完整數據,及每日全量。
6.2.2 維度表同步策略
維度表:比如訂單狀態,審批狀態,商品 分類。
維度表數據量比較小:通常可以做每日全量,就是每天存一份完整數據。即每日全量。
說明:
6.2.3 事務型事實表同步策略
事務型事實表:比如交易流水,操作日志,出庫入庫記錄等。
因為數據不會變化,而且數據量巨大,所以每天只同步新增數據即可,所以可以做成每日增量表,即每日創建一個分區存儲。
6.2.4 周期型事實表同步策略
周期型事實表:比如,訂單、請假、貸款申請等。
這類表從數據量的角度,存每日全量的話,數據量太大,冗余也太大。如果每日增量無法反應數據變化,則導每日新增及變化量,包括了當日的新增和修改。
第7章 業務數倉搭建
7.1 業務數倉架構圖
7.2 RDS 服務器準備
7.2.1 RDS 服務器購買
阿里云關系型數據庫(Relational DataBase Service, 簡稱 RDS)是一種穩定可靠、可彈性伸縮的在線數據庫服務器。
7.5.3 每日增量表同步
1)同步策略:每日增量
每日新增的表包括:ods_order_detail
每日增量的區別就是要按照日期進行過濾,只篩選出今天新產生的數據。
條件:
7.5.4 每日新增及變化表同步
1)同步策略:每日新增及變化
每日新增及變化的表包括:ods_order_info
條件:如果創建時間是當日或者操作時間是當日,則滿足條件。
DATE_FORMAT(create_time, '%Y%m%d')='${bizdate}' or DATE_FORMAT(operate_time, '%Y%m%d')='${bizdate}'7.6 DWD層
DWD 層,一般是對 ODS 層數據進行一定的清洗加工,如果是面對關系導入過來的數據表,還要把原本的關系型表結構,進行一定程度的維度退化。作為更易處理的明細數據。
比如:
ODS 地區 + ODS 省份 => DWD 省份地區
ODS 商品信息 + ODS 品牌 + ODS 商品一級分類 + ODS 商品二級分類 + ODS商品三級分類 => DWD 商品信息
7.6.2 手動將數據導入 DWD 層
1)在臨時查詢中執行
Insert overwrite table dwd_order_info_di partition(ds) Select id,total_amont,order_status,user_id,payment_way,out_trade_no,province_id,create_time,operate_time,ds from ods_order_info_di where ds='${bizdate}' and id is not null; //過濾條件:id不能為空insert overwrite table dwd_order_detail_di partition(ds) select od.id,order_id,oi.user_id,sku_idsku_name,order_price,sku_num,oi.province_id,od.create_time,od.ds from ods_order_detail_di od join ods_order_info_di oi and od.ds = '${bizdate}' and od.id is not null;//商品表 insert overwrite table dim_sku_info_df partition(ds) select sku.id,sku.spu_id,sku.price,sku.sku_name,sku.sku_desc,sku.weight,sku,tm_id,tm.tm_name,sku.category3_id,c2.id category2_id,c1.id cate gory1_id,c3.name category3_name,c2.name category2_name,c1.name category1_name,sku.create_time,sku.ds from (select *form ods_sku_info_dfwhere ds='${bizdate}' and id is not null ) sku join ods_base_category3_df c3 on sku.category3_id = c3.id and c3.ds = '${bizdate}' join ods baase category2 df c2 on c3.category2_id = c2.id and c2.ds = '${bizdate}' join ods_base_category1_df c1 on c2.category1_id = c1.id and c1.ds = '${bizdate}' join ods_base_trademark_df tm on tm.tm_id = sku.tm_id and tm.ds = '${bizdate}';insert overwrite table dim_user_info_df partition(ds) select id,name,birthday,gender,email,user_level,create_time,ds from ods_user_info_df where ds='${bizdate}' and id is not null;insert overwrite table dim_base_province_df partition(ds) select p.id,p.name,p.region_id,r.region_name,p.ds from ods_base_province_df p join ods_base_region_df r on p.region_id = r.id and p.ds='${bizdate}' and r.ds = '${bizdate}';7.7 DWS層
DWS 層主要指針對明細粒度的數據進行短周期的匯總。DWS 公共匯總層是面向分析對象的主題聚集建模。
在本教程中,最終的分析目標為:最近一天某個類目、某個地區、某類人群購買商品的銷售總額、購買力分析。因此,我們可以以最終交易成功的商品、買家、地區等角度對最近一天的數據進行組合 ,組合成為涵蓋多個維度的事實寬表。
7.8 ADS層
ADS 層主要是指針對某一個特定的維度進行的匯總。
在本課程中,主要分析三個需求:用戶各個年齡段統計、地區銷售統計、熱門商品排行。所以主要是針對年齡、地區、商品進行匯總統計,統計四個指標下單數、購買商品個數、銷售額、平均客單價。
第8章 數據導出與作業調度
將 MaxCompute 中的計算完的結果,需要導入到RDS數據庫中,用于后續的可視化。
8.1 創建結果數據庫
1)在 RDS 服務器中,新建一個 gmall_adb 數據庫,用來保存之后從 MaxCompute 中的結果數據。
8.2 創建商品銷售數據同步節點
將ADS層數據導出到 MaxCompute。
1)數據開發 -> 數據集成 -> 新建數據集成節點 -> 數據同步
數據集成:用于 MaxCompute 對外的輸入輸出。
數據開發:是 MaxCompute 內部層與層之間的腳本編寫。
第9章 數據可視化
總結
- 上一篇: 第7章 C控制语句:分支和跳转
- 下一篇: 阿里云实时数据仓库