阿里云实时数仓搭建与组件选型

一、实时数仓分层规范

1.1 分层需求分析

建设实时数仓的目的,主要是增加数据计算的复用性。每次新增加统计需求时,不至于从原始数据进行计算,而是从半成品继续加工而成。

我们这里从 loghub、kafka 的 ods 层读取用户行为日志以及业务数据,并进行简单处理,写回到 kafka、hologres 作为 dwd 层。

1.2每层的职能

分层

数据描述

生成计算工具

存储媒介

ODS

原始数据,日志和业务数据

Kafka LogHub

DWD

根据数据对象为单位进行分流,比如订单、页

面访问等等。

FLINK

Kafka Hologres

DIM

维度数据

FLINK

Kafka Hologres

DWS

根据某个维度主题将多个事实数据轻度聚合,

形成主题宽表。

FLINK

Kafka Hologres

DM

把 Kafka Hologres中的数据根据可视化需要进行筛选聚合。

FLINK

可视化展示

v ODS (LogHub、kafka、DataHub)

原始数据,日志和业务数据

v DWD(kafka、Hologres)

根据数据对象为单位进行分流,比如订单、页面访问等等

v DIM(Hologres)

维度数据

v DWS (kafka、Hologres)

根据某个主题将多个事实数据轻度聚合,形成主题宽表。

v ADS (Hologres)

把 Hologres中的数据根据可视化需要进行筛选聚合

1.3分层命名规范

对数据架构各个分层的数据管理,需要建设相应的数据库。阿里云采用一个项目空间管理,分库按照表名前缀进行逻辑划分。

注:[]:可选项,可以省略

  • 源数据层(ODS)的命名规范如下:

分层

数据模型命名

命名规范

开发目录 LogHub、Kafka、hologres

备注

源数据层(ODS)ods_kafka/sls/cdc+_+……

日志表:soyoung_dw.ods_sls/kafka+_+数据来源名|主题名+_+ 自定义表名+_+(周期后缀)

LogHub、Kafka案例:ods_sls_md_xcx_axm_log_rt
  • 数据仓库层(DW)的命名规范如下:

分层

数据模型命名

命名规范

实时开发目录

备注

明细数据层(DWD)dwd+_+……dwd_数据输出源_{主题域名[_二级主题名]}_{自定义表名}_{周期后缀}阿里云实时计算Flink平台案例:dwd_md_xcx_axm_log_rt
汇总数据层(DWS)dws+_+……dws_数据输出源_{主题域名[_二级主题名]}_{自定义表名}_[summary|topic]_{周期后缀}阿里云实时计算Flink平台

summary:按照多维度聚合

topic:按照1个维度聚合

案例:dws_md_xcx_axm_log_rt

维度数据层(DIM)dim+_+……dim_{维度名}_{info}_{周期后缀}阿里云实时计算Flink平台dim_{维度名}_{info}_{周期后缀}
  • 数据集市层(DM)的命名规范如下:

分层

数据模型命名

命名规范

DataWorks开发目录

备注

集市层(DM)

dm_+_+……(平台组)

dm_saas+_+……(商家组)

dm_business+_+……(交易组)

dm_content+_+……(内容组)

阿里云实时计算Flink平台/dm/……

阿里云实时计算Flink平台/dm/dm_saas/……

阿里云实时计算Flink平台/dm/dm_business/……

阿里云实时计算Flink平台/dm/dm_content/……

soyoung_dw.dm_{主题域名[_二级主题名]|专题}_{自定义表名}_{周期后缀}

  • 临时表(tmp)与视图命(view)命名规范如下:

分层

数据模型命名

命名规范

DataWorks开发目录

备注

临时表

作业中:表名后统一加"_tmp[_01]"

临时需求:tmp_……

阿里云实时计算Flink平台

临时表不定期清理:drop或删数据

视图表名后统一加"_view"阿里云实时计算Flink平台应用场景kylin数据表等

1.4表命名规范

1.4.1整体原则

  • 表名字要求采用小写
  • 作业名同表名一致
  • 周期后缀:标识增全量、调度周期:

周期后缀标识

(增全量、调度周期)

解释

_rt实时增量
"_all_rt"实时全量

1.5字段规范

1.5.1命名规范:

  1. 原则:字段名尽量详细,易于理解
  2. 小写:表的字段名字要求采用小写
  3. 继续使用原业务系统字段:字段数据、意义没有改变时,原则上,可以使用原业务系统字段名字
  4. 英文字段名组成:[is]_[修饰词]+字段描述词+[后缀/度量]+[时间周期词],强烈建议保留后缀
  5. 中文名组成:[时间周期词]+[修饰词]+字段描述词+[度量]
  6. 必须以字母开头
  7. 字段名由字母、下划线、数字组成
  8. 字段英文名长度尽量控制在30个字符以内
  9. 表示是否的字段,用is_含义, 例如,deal是否可预订,is_apt、is_prepay等。
    业务含义是动词时,尽量不用使用其分词命名,如is_paid,应为is_pay
    定义:是(1)非(0)或 肯(1)否(0),存0、1
  10. 基础字段命名:用num, amt, cnt, id, type等简写做后缀,如”order_cnt”表示订单数量,“product_id”标示产品ID
  11. DW内部:相同含义的字段名称、数据类型在正常情况下须保持一致,减少使用过程中的混淆,避免造成数据流转时不能被抽取或数据截断情况

1.5.2分区字段命名规范

  •  时间分区命名:

分区名统一命名为dp,格式统一要求(ods_db前缀的表分区名pt,由于阿里产品原因):

分区类型

分区名及格式

备注

日分区dp=yyyy-mm-dd
月分区dp=yyyy-mm
小时分区hh=00..23第一个小时00,最后小时23
分钟分区hhmm=0000..235010分钟举例

1.5.3字段类型

  • 字段类型只使用以下几种:

int 数量、次数、人数等整数字段

bigint 数量、次数、人数等整数字段

double 金额、比率等小数字段

string 订单编号、SKU编号、描述类信息、日期等字符字段

  • 不使用比int小的数字类型
  • 不使用unsigned

二、实时数仓架构设计

  1. 阿里云技术产品及选型

    v 数据采集传输:EMSKafka、DataHub、LogHub、DTS

    v 数据存储:RDS、AnalyticDB、Hologres

    v 数据计算:FlinkSql、JavaFlink

    v 数据可视化:DataV

  2. 普通实时计算与实时数仓比较

    普通的实时计算优先考虑时效性,所以从数据源采集经过实时计算直接得到结果。如此做时效性更好,但是弊端是由于计算过程中的中间结果没有沉淀下来,所以当面对大量实时需求的时候,计算的复用性较差,开发成本随着需求增加直线上升。

    实时数仓基于一定的数据仓库理念,对数据处理流程进行规划、分层,目的是提高数据的复用性。

3.  系统架构设计

      4.业务流

重点思考:
问:FlinkSQL 是如何解决双流 Join 的问题,会不会出现时间错位而未关联的情况?

答:FlintkSQL 是一种有状态的流式计算,流中的数据会被以状态的形式保存起来,所

以即使两个流中的数据有一定的延迟,也可以利用状态关联出来。

问:这个状态保存多久?
答:阿里云中 FlinkSQL 的状态数据默认保存 36 个小时。

问:flink sql⾥⾯cdc模式读取mysql数据,两个cdc源进⾏join的时候,如果在⼀个窗⼝内等不到另⼀ 个的数据会怎么处理?会去全量读mysql数据吗?
答:如果等不到就为null了吧,不会mysql去读了,回先发null,等能关联上了再回撤null值下发关联上的值,这个和source是啥没关系,双流join的语义就是这样的。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
阿里云Redis是一种分布式内存数据库系统,常用于缓存和数据存储,插入数据是Redis的常见操作之一。在使用阿里云Redis插入数据时,需要对Redis进行配置。以下是阿里云Redis插入数据配置的流程: 1.连接Redis 在使用Redis插入数据前,需要先连接到Redis。可以使用Redis客户端连接,也可以使用基于Java的Redis客户端Jedis完成连接。 2.选择数据库 连接Redis成功后,需要选择要插入数据数据库。在Redis中,可以切换多个数据库。可以使用SELECT命令选择数据库,命令格式为:SELECT index 3.插入数据 在选择好要插入数据数据库后,可以使用命令SET key value向Redis中插入数据。其中,key是要插入的数据的键值,value是要插入的数据的值。插入数据也可以通过使用不同的数据类型,如List、Set、Sorted Set、Hash等来实现。 4.配置过期时间 插入数据时,可以设置数据的过期时间。过期时间可以通过使用EXPIRE命令来设置,命令格式为:EXPIRE key seconds。其中,key是要设置过期时间的数据的键值,seconds是过期时间,以秒为单位。 5.检查是否插入成功 插入数据完成后,可以使用命令GET key来检查是否插入成功。其中,key是插入数据时设置的键值。 以上是阿里云Redis插入数据配置的流程。在配置时,需要注意选择合适的数据类型、设置正确的过期时间和检查插入是否成功等细节。只有正确地配置Redis,才能顺利地插入和使用数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任错错

如果对您有帮助我很开心

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值