網(wǎng)站建設漢獅怎么樣seo研究協(xié)會網(wǎng)
文章目錄
- ODS層及DWD層構建
- 01:課程回顧
- 02:課程目標
- 03:數(shù)倉分層回顧
- 04:Hive建表語法
- 05:Avro建表語法
ODS層及DWD層構建
01:課程回顧
-
一站制造項目的數(shù)倉設計為幾層以及每一層的功能是什么?
- ODS:原始數(shù)據(jù)層:存放從Oracle中同步采集的所有原始數(shù)據(jù)
- DW:數(shù)據(jù)倉庫層
- DWD:明細數(shù)據(jù)層:存儲ODS層進行ETL以后的數(shù)據(jù)
- DWB:輕度匯總層:對DWD層的數(shù)據(jù)進行輕度聚合:關聯(lián)和聚合
- 基于每個主題構建主題事務事實表
- DWS:維度數(shù)據(jù)層:對DWD層的數(shù)據(jù)進行維度抽取
- 基于每個主題的維度需求抽取所有維度表
- ST:數(shù)據(jù)應用層
- 基于DWB和DWS的結果進行維度的聚合
- DM:數(shù)據(jù)集市層
- 用于歸檔存儲公司所有部門需要的shuju
-
一站制造項目的數(shù)據(jù)來源是什么,核心的數(shù)據(jù)表有哪些?
- 數(shù)據(jù)來源:業(yè)務系統(tǒng)
- ERP:公司資產(chǎn)管理系統(tǒng)、財務數(shù)據(jù)
- 工程師信息、零部件倉儲信息
- CISS:客戶服務管理系統(tǒng)
- 工單信息、站點信息、客戶信息
- 呼叫中心系統(tǒng)
- 來電受理信息、回訪信息
-
一站制造項目中在數(shù)據(jù)采集時遇到了什么問題,以及如何解決這個問題?
- 技術選型:Sqoop
- 問題:發(fā)現(xiàn)采集以后生成在HDFS上文件的行數(shù)與實際Oracle表中的數(shù)據(jù)行數(shù)不一樣,多了
- 原因:Sqoop默認將數(shù)據(jù)寫入HDFS以普通文本格式存儲,一旦遇到數(shù)據(jù)中如果包含了特殊字符\n,將一行的數(shù)據(jù)解析為多行
- 解決
- 方案一:Sqoop刪除特殊字段、替換特殊字符【一般不用】
- 方案二:更換其他數(shù)據(jù)文件存儲類型:AVRO
- 數(shù)據(jù)存儲:Hive
- 數(shù)據(jù)計算:SparkSQL
-
什么是Avro格式,有什么特點?
- 二進制文本:讀寫性能更快
- 獨立的Schema:生成文件每一行所有列的信息
- 對列的擴展非常友好
- Spark與Hive都支持的類型
-
如何實現(xiàn)對多張表自動采集到HDFS?
-
需求
- 讀取表名
- 執(zhí)行Sqoop命令
-
效果:將所有增量和全量表的數(shù)據(jù)采集到HDFS上
-
全量表路徑:維度表:數(shù)據(jù)量、很少發(fā)生變化
/data/dw/ods/one_make/ full_imp /表名/分區(qū)/數(shù)據(jù)
-
增量表路徑:事實表:數(shù)據(jù)量不斷新增,整體相對較大
/data/dw/ods/one_make/ incr_imp /表名/分區(qū)/數(shù)據(jù)
-
Schema文件的存儲目錄
/data/dw/ods/one_make/avsc
-
-
Shell:業(yè)務簡單,Linux命令支持
-
Python:業(yè)務復雜,是否Python開發(fā)接口
- 調用了LinuxShell來運行
-
-
Python面向對象的基本應用
-
語法
-
定義類
class 類名:# 屬性:變量# 方法:函數(shù)
-
定義變量
key = value
-
定義方法
def funName(參數(shù)):方法邏輯return
-
-
面向對象:將所有事物以對象的形式進行編程,萬物皆對象
- 對象:是類的實例
-
對象類:專門用于構造對象的,一般稱為Bean,代表某一種實體Entity
-
類的組成
class 類名:# 屬性:變量# 方法:函數(shù)
-
業(yè)務:實現(xiàn)人購買商品
-
人
class Person:# 屬性id = 1name = zhangsanage = 18gender = 1……# 方法def eat(self,something):print(f"{self.name} eating {something}")def buy(self,something)print(f"{self.name} buy {something}")
- 每個人都是一個Person類的對象
-
商品
class Product:# 屬性id = 001price = 1000.00size = middlecolor = blue……# 方法def changePrice(self,newPrice):self.price = newPirce
-
-
-
工具類:專門用于封裝一些工具方法的,utils,代表某種操作的集合
-
類的組成:一般只有方法
class 類名:# 方法:函數(shù)
-
字符串處理工具類:拼接、裁剪、反轉、長度、轉大寫、轉小寫、替換、查找
class StringUtils:def concat(split,args*):split.join(args)def reverse(sourceString)return reverse(sourceString)……
-
日期處理工具類:計算、轉換
class TimeUitls:def computeTime(time1,time2):return time1-time2def transTimestamp(timestamp):return newDateyyyy-MM-dd HH:mm:ss)def tranfData(date)return timestamp
-
-
常量類:專門用于定義一些不會發(fā)生改變的變量的類
-
類的組成:一般只有屬性
class 類名:# 屬性:不發(fā)生變化的屬性
-
定義一個常量類
class Common:ODS_DB_NAME = "one_make_ods"……
-
file1.py:創(chuàng)建數(shù)據(jù)庫
create database if not exists Common.ODS_DB_NAME;
-
file2.py:創(chuàng)建表
``` create table if not exists Common.ODS_DB_NAME.tbname ```
-
file3.py:插入數(shù)據(jù)到表中
insert into table Common.ODS_DB_NAME.tbname
-
問題1:容易寫錯
-
問題2:不好修改
-
-
-
-
-
02:課程目標
- 目標:自動化的ODS層與DWD層構建
- 實現(xiàn)
- 掌握Hive以及Spark中建表的語法規(guī)則
- 實現(xiàn)項目開發(fā)環(huán)境的構建
- 自己要實現(xiàn)所有代碼注釋
- ODS層與DWD層整體運行測試成功
03:數(shù)倉分層回顧
-
目標:回顧一站制造項目分層設計
-
實施
-
ODS層 :原始數(shù)據(jù)層
-
來自于Oracle中數(shù)據(jù)的采集
-
數(shù)據(jù)存儲格式:AVRO
-
ODS區(qū)分全量和增量
-
實現(xiàn)
-
數(shù)據(jù)已經(jīng)采集完成
/data/dw/ods/one_make/full_imp /data/dw/ods/one_make/incr_imp
-
step1:創(chuàng)建ODS層數(shù)據(jù)庫:one_make_ods
-
step2:根據(jù)表在HDFS上的數(shù)據(jù)目錄來創(chuàng)建分區(qū)表
-
step3:申明分區(qū)
-
-
-
DWD層
- 來自于ODS層數(shù)據(jù)
- 數(shù)據(jù)存儲格式:ORC
- 不區(qū)分全量和增量的
- 實現(xiàn)
- step1:創(chuàng)建DWD層數(shù)據(jù)庫:one_make_dwd
- step2:創(chuàng)建DWD層的每一張表
- step3:從ODS層抽取每一張表的數(shù)據(jù)寫入DWD層對應的表中
-
-
小結
- 回顧一站制造項目分層設計
04:Hive建表語法
-
目標:掌握Hive建表語法
-
實施
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name (col1Name col1Type [COMMENT col_comment],co21Name col2Type [COMMENT col_comment],co31Name col3Type [COMMENT col_comment],co41Name col4Type [COMMENT col_comment],co51Name col5Type [COMMENT col_comment],……coN1Name colNType [COMMENT col_comment]) [PARTITIONED BY (col_name data_type ...)] [CLUSTERED BY (col_name...) [SORTED BY (col_name ...)] INTO N BUCKETS] [ROW FORMAT row_format]row format delimited fields terminated by lines terminated by [STORED AS file_format] [LOCATION hdfs_path] TBLPROPERTIES
- EXTERNAL:外部表類型(刪除表的時候,不會刪除hdfs中數(shù)據(jù))
- 內(nèi)部表、外部表、臨時表
- PARTITIONED BY:分區(qū)表結構
- 普通表、分區(qū)表、分桶表
- CLUSTERED BY:分桶表結構
- ROW FORMAT:指定分隔符
- 列的分隔符:\001
- 行的分隔符:\n
- STORED AS:指定文件存儲類型
- ODS:avro
- DWD:orc
- LOCATION:指定表對應的HDFS上的地址
- 默認:/user/hive/warehouse/dbdir/tbdir
- TBLPROPERTIES:指定一些表的額外的一些特殊配置屬性
- EXTERNAL:外部表類型(刪除表的時候,不會刪除hdfs中數(shù)據(jù))
-
小結
- 掌握Hive建表語法
05:Avro建表語法
-
目標:掌握Hive中Avro建表方式及語法
-
路徑
- step1:指定文件類型
- step2:指定Schema
- step3:建表方式
-
實施
-
Hive官網(wǎng):https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateTable
-
DataBrics官網(wǎng):https://docs.databricks.com/spark/2.x/spark-sql/language-manual/create-table.html
-
Avro用法:https://cwiki.apache.org/confluence/display/Hive/AvroSerDe
-
指定文件類型
-
方式一:指定類型
stored as avro
-
方式二:指定解析類
--解析表的文件的時候,用哪個類來解析 ROW FORMAT SERDE'org.apache.hadoop.hive.serde2.avro.AvroSerDe' --讀取這張表的數(shù)據(jù)用哪個類來讀取 STORED AS INPUTFORMAT'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' --寫入這張表的數(shù)據(jù)用哪個類來寫入 OUTPUTFORMAT'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
-
-
指定Schema
-
方式一:手動定義Schema
CREATE TABLE embedded COMMENT "這是表的注釋" ROW FORMAT SERDE'org.apache.hadoop.hive.serde2.avro.AvroSerDe' STORED AS INPUTFORMAT'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' OUTPUTFORMAT'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' TBLPROPERTIES ('avro.schema.literal'='{"namespace": "com.howdy","name": "some_schema","type": "record","fields": [ { "name":"string1","type":"string"}]}' );
-
方式二:加載Schema文件
CREATE TABLE embedded COMMENT "這是表的注釋" ROW FORMAT SERDE'org.apache.hadoop.hive.serde2.avro.AvroSerDe' STORED as INPUTFORMAT'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' OUTPUTFORMAT'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' TBLPROPERTIES ('avro.schema.url'='file:///path/to/the/schema/embedded.avsc' );
-
-
建表語法
-
方式一:指定類型和加載Schema文件
create external table one_make_ods_test.ciss_base_areas comment '行政地理區(qū)域表' PARTITIONED BY (dt string) stored as avro location '/data/dw/ods/one_make/full_imp/ciss4.ciss_base_areas' TBLPROPERTIES ('avro.schema.url'='/data/dw/ods/one_make/avsc/CISS4_CISS_BASE_AREAS.avsc');
-
方式二:指定解析類和加載Schema文件
create external table one_make_ods_test.ciss_base_areas comment '行政地理區(qū)域表' PARTITIONED BY (dt string) ROW FORMAT SERDE'org.apache.hadoop.hive.serde2.avro.AvroSerDe' STORED AS INPUTFORMAT'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' OUTPUTFORMAT'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' location '/data/dw/ods/one_make/full_imp/ciss4.ciss_base_areas' TBLPROPERTIES ('avro.schema.url'='/data/dw/ods/one_make/avsc/CISS4_CISS_BASE_AREAS.avsc');
create external table 數(shù)據(jù)庫名稱.表名 comment '表的注釋' partitioned by ROW FORMAT SERDE'org.apache.hadoop.hive.serde2.avro.AvroSerDe' STORED AS INPUTFORMAT'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' OUTPUTFORMAT'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' location '這張表在HDFS上的路徑' TBLPROPERTIES ('這張表的Schema文件在HDFS上的路徑')
-
-
?
-
小結
- 掌握Hive中Avro建表方式及語法