知識點:
spark DSL風格:
表示column方式: $“field” 'field col(“field”) dataframe(“field”)
每遇到select 方法生成一張新的表,後續方法 相當於子查詢
agg 聚合函數 同時聚合多個字段 參數用map表示 字段->函數名
where 條件 score > 80 把score類型轉爲int 比較
seq:* 返回 Any*類型
丟棄一列: df.drop(“filed”)
增加一列 先df.map 讓返回Row(seq:*) 增加一列 然後df.schema獲取schema.add(“filed”, DataTypes) spark.createDataFrame獲取新的frame
Atlas 工具: 元數據開發系統, 數據治理 搜索字段 查看血緣關係:字段從哪些表中聯合生成
項目需求 :
1 將清洗後的數據導入hive ODS層
創建外部表 | 創建分區 | parquet存儲 |
---|---|---|
CREATE EXTERNAL TABLE | partitioned BY (dt String) | stored AS parquet |
刪除表不刪數據 | 對數據分開存儲和查詢提高效率) | snappy壓縮省空間 列式存儲 查詢快 |
2 ODS層-> DWD 提取明細 需要的字段和數據
套路:
創建表 | 寫sql提煉數據 |
---|---|
create external table dtl | insert into table dtl partition(dt=‘dt’) select |
分主題 補全信息 和轉換 | 插入到不同分區 會生成table中聲明的格式文件 無insert 只有select則打印 控制檯 |
舉例: 將貼源層的所有用戶標識的字段提煉爲一個字段, 提煉業務需求的所需要的字段
知識點:coalesce返回第一個不爲null的字段值
if(flag, 1, 2) flag true 返回1 false 返回2
3 DWD->DWS 匯聚層(得到分組字段(可分析不同的主題(流量主題:pv uv 時長))和維度)
套路:
創建表 | 寫分組 sql提煉數據 |
---|---|
create external table dws | insert into table dws partition(dt=‘dt’) select group by |
3.1 DWS->DWS
DWS層可以更一步提煉比如 uid sessionid 分組之後獲取到pv總數 每一條代表訪問次數 提煉到以uid分組 獲取每個用戶pv總數 和 訪問總數 每一條代表uv 和每個維度字段
4 DWS->ADS 數據應用層
沒有group by 全部聚合
事件 | 含義 |
---|---|
pv | 點擊次數 |
訪問次數 | uid session分組 次數 |
uv | uid分組 次數 |
平均每次訪問時長 | session訪問總時長/訪問次數 |
人均訪問次數 | 訪問次數/uv |
人均訪問深度 | pv/uv |
回頭客佔比 | 訪問次數大於1的/uv |