DIM 层处理
实现思路
最原始的表 MySQL 中 area 到 HBase 中 转换 area 表 到 地区ID、地区的名字、城市ID、城市的名字、省份 ID、省份的名字 到 HBase 中
在分析交易过程时,可以通过卖家、买家、商品和时间等维度描述交易发生的环境,所以维度的作用一般是查询约束、分类汇总以及排序等。
HBaseReader
class HBaseReader extends RichSourceFunction[(String, String)] {
private var conn: Connection = null
private var table: Table = null
private var scan: Scan = null
// ... 配置 HBase 连接,扫描表,读取数据
}
HBaseWriterSink
class HBaseWriterSink extends RichSinkFunction[String] {
// 将处理后的数据写入 HBase
def insertDimArea(hbTable: Table, value: String): Unit = {
val infos: Array[String] = value.split(",")
// 写入 areaId, aname, cid, city, proId, province 到 HBase
}
}
AreaDetailInfo (主程序)
object AreaDetailInfo {
def main(args: Array[String]): Unit = {
// 1. 从 HBase 读取原始数据
// 2. 转换为 AreaDetail 格式
// 3. 使用 Flink SQL 进行三表关联(area -> city -> province)
// 4. 将结果写入新的 HBase 表
}
}
DW 层处理
DW(Data WareHouse 数据仓库层),包含 DWD、DWS、DIM 层数据加工而成,主要完成数据架构与整合,建立一致性的维度,构建可复用的面向分析和统计的明细事实表,以及汇总公共粒度的指标。
- DWD(Data Warehouse Detail 细节数据层):业务层与数据仓库的隔离层,以业务过程作为建模驱动
- DWS(Data WareHouse Service 服务数据层):基于 DWD 的基础数据,整合汇总成分析某一个主题域的服务数据
- 公共维度层(DIM):基于维度建模理念思想,建立一致性维度
- TMP 层:临时层,存放计算过程中临时产生的数据
ADS层处理
ADS(Application Data Store 应用层数据)。基于 DW 数据,整合汇总成主题域的服务数据,用于提供后续的业务查询等。
数据明细层
从数据明细层分析结果到 ClickHouse、Redis、Druid 等写入到 Redis 中。
class MySinkToRedis extends RichSinkFunction[(CityOrder, Long)] {
override def invoke(value: (CityOrder, Long), context: SinkFunction.Context[_]): Unit = {
// 写入 Redis
jedis.hset(s"${value._1.province}${value._1.city}", map);
}
}