SQL 语言是一门声明式的,简单的,灵活的语言,Flink 本身提供了对 SQL 的支持。Flink 1.6 版本和 1.8 版本对 SQL 语言的支持有限,不支持建表语句,不支持对外部数据的关联操作。因此我们通过 Apache Calcite 对 Flink SQL API 进行了扩展,用户只需要关心业务需求怎么用 SQL 语言来表达即可。
扩展了支持创建源表 SQL,通过解析 SQL 语句,获取数据源配置信息,创建对应的 TableSource 实例,并将其注册到 Flink environment。示例如下:
使用 Apache Calcite 对 SQL 进行解析,通过维表关键字识别维表,使用 RichAsyncFunction 算子异步读取维表数据,并通过 flatMap 操作生成关联后的 DataStream,然后转换为 Table 注册到 Flink Environment。示例如下:
使用 SQLQuery 方法,支持从上一层表或者视图中创建视图表,并将新的视图表注册到 Flink Environment。创建语句需要按照顺序写,比如 myView2 是从视图 myView1 中创建的,则 myView1 创建语句要在myView2语句前面。如下:
支持创建结果表,通过解析 SQL 语句,获取配置信息,创建对应的 AppendStreamTableSink 或者 UpsertStreamTableSink 实例,并将其注册到 Flink Environment。示例如下:
支持自定义 UDF 函数,继承 ScalarFunction 或者 TableFunction。在 resources 目录下有相应的 UDF 资源配置文件,默认会注册全部可执行 Jar 包中配置的 UDF。直接按照使用方法使用即可。
部署方式同 Flink Stream 组件。
为了保证实时数据的统一对外出口以及保证数据指标的统一口径,我们根据业界离线数仓的经验来设计与构架微博广告实时数仓。
数据仓库分为三层,自下而上为:数据引入层(ODS,Operation Data Store)、数据公共层(CDM,Common Data Model)和数据应用层(ADS,Application Data Service)。
数据引入层(ODS,Operation Data Store):将原始数据几乎无处理的存放在数据仓库系统,结构上与源系统基本保持一致,是数据仓库的数据准。
数据公共层(CDM,Common Data Model,又称通用数据模型层):包含 DIM 维度表、DWD 和 DWS,由 ODS 层数据加工而成。主要完成数据加工与整合,建立一致性的维度,构建可复用的面向分析和统计的明细事实表,以及汇总公共粒度的指标。
公共维度层(DIM):基于维度建模理念思想,建立整个企业的一致性维度。降低数据计算口径和算法不统一风险。
公共维度层的表通常也被称为逻辑维度表,维度和维度逻辑表通常一一对应。
公共汇总粒度事实层(DWS,Data Warehouse Service):以分析的主题对象作为建模驱动,基于上层的应用和产品的指标需求,构建公共粒度的汇总指标事实表,以宽表化手段物理化模型。构建命名规范、口径一致的统计指标,为上层提供公共指标,建立汇总宽表、明细事实表。
公共汇总粒度事实层的表通常也被称为汇总逻辑表,用于存放派生指标数据。
明细粒度事实层(DWD,Data Warehouse Detail):以业务过程作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表。可以结合企业的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,也即宽表化处理。
本文系作者在时代Java发表,未经许可,不得转载。
如有侵权,请联系nowjava@qq.com删除。