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);
  }
}