知识点:
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 提取明细 需要的字段和数据(比如流量主题: 需要用户uid 和会话sessionid 和pg_view事件和各种维度来为统计流量做准备)
套路:
创建表 | 写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 |