数据仓库项目笔记4

知识点:
  • sparksession.createDataset 需要对元素序列化(发送到task), import sparksession.implicits_ 只支持基本数据类型和case class 序列化

  • 自定义序列化 Encoders.kryo(clazz)

    • 现象:使用sparkSession.createDataset()创建Dataset时,如果传入的Seq类型是Map类型,那么编译时会报错,提示没有对应的encoder
      解释: reateDataset()是一个科里化方法,需要传入第二个参数Encoder,sparkSession的隐式转换类中有基本数据类型和case class 的encoder,但是没有Map的encoder,所以会报错,如果想正常运行,需要使用 Encoder.kryo(Classof[T]) 这个方法构建一个encoder 并传入
  • hive本地运行:set hive.exec.mode.local.auto=true 本地模式

  • with view as(select *from) 创建临时表

  • hive分区dt 字段为表默认字段

  • 数据校验方法: 可以用总数对比校验

hive 高阶聚合函数
  • 背景:对于有多个维度的明细表,有时业务可能需要不同维度的组合来进行多维度的分析,那么如果将数据每个维度都新建一张表会建立大量的表,不利于维护,所以需要将这些不同维度的数据都插入到同一张表中;
  • 原理:建立一张最细粒度的表,然后插入数据,当遇到更粗粒度的数据时,被忽略的维度给null值,即可实现所有数据都在同一张表汇总;
  • 实现:现实中,表虽然有了,但是如果每种维度都需要手动去插入数据,那么效率还是极低,所以引入了hive高阶函数,(一键)生成想要的维度的数据:
  • 多维模型 数据立方体 全维度 group by fileds with cube
  • 自由维度组合 grouping set((f1,f2),(f3))
  • 更宽范围取维度 rollup 从右到左维度变宽 (省 市 区 街道)
下钻上卷切片切块旋转
取更细维度取更宽维度取部分维度改变group by字段顺序
需求:

历史表字段

日期用户id用户首登日期最后登录日期
  • 日新日活主题分析: 对uid分组, 获取日活 通过历史中间表获取日新
  • 日活: 每日从日志中获取的用户
  • 日新: 当日日活左连接历史表 历史表中没有的即为日新
  • 历史表设计
    • 历史表由自己和当日日活求出:
    • 日活中没有在历史表中的(即日新) 则添加到历史表并且首登日期和末登日期为当日, 如果存在历史表中则 将末登日期修改为当日 使用full join实现
  • 认知(尽量使用if 不使用where union)
  • 首登日期可求出日新 最后登录日期可求出日活(为留存和新鲜度打基础)
对比流量主题分析: 通过对uid sessionid 分区统计出pv uv 时长 访问次数
日新日活主题分析: 首登日期可求出日新 最后登录日期可求出日活(为留存和新鲜度打基础)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值