写点什么

Domino 流计算快速上手 - 1. 扩维

  • 2024-11-12
    北京
  • 本文字数:2026 字

    阅读完需:约 7 分钟

使用 SQL 即可定义扩维操作,实现 ODS 更新立即扩维并更新至 DWD 层,使用简单,实时性更高。


扩维是数据仓库建模中的一项重要操作。


根据经典的数据仓库建模理论,在通过 ETL(提取、转换、加载)过程将交易系统的数据加载至数据仓库的 ODS(贴源层)层后,下一步通常是对 ODS 层的原始交易数据进行扩维处理。扩维的目的是通过加入更多的维度信息,形成信息更为完备的“大宽表”。这些“大宽表”数据随后被写入 DWD(明细层),为进一步的数据分析和计算提供了结构化的基础数据。通过扩维处理,能够加速数据分析过程,提高多维度分析的效率和准确性。


过去,扩维操作通常采用“跑批”的方式进行处理。具体而言,在 ETL 过程完成后,通常会在非高峰时段(如晚上)使用调度工具执行 SQL 语句,批量地将当天的新增数据进行扩维处理,并写入 DWD 层。这种方式依赖于定时批处理任务,适用于数据量较大且更新频率较低的场景,但在实时性要求较高的应用中存在一定的局限性。


通过 Domino 流计算技术,我们可以使用 SQL 定义扩维操作,实现 ODS 到 DWD 是实时扩维更新,从而避免了“跑批”操作,无需调度,不但实时性更佳,而且无需第三方工具,大大降低了系统复杂度和运维成本。


如果再通过 CDC 工具将交易系统的数据实时更新至 ODS 仓中,配合流计算,就能使数仓真正具备“实时分析”的能力。


作为介绍 Domino 流计算的第一篇文章,我们就从最基本的扩维操作开始,通过一个简单对订单 + 商品信息 执行 JOIN 扩维操作的例子,演示 Domino 的使用方法和带来的效果。

表结构

ods_order 订单信息:存储订单信息的事实表;

dim_prod 商品信息:存储商品详细信息的维度表;

dwd_order_detail 订单详情:扩维后包含所有商品信息的订单详情表。


操作

  1. 第一步,让我们创建表 ods_order 和 dim_prod

CREATE TABLE ods_order (   id int,   prod_id int,   ts timestamp   );
CREATE TABLE dim_prod ( id int, prod_name text, prod_detail text, );
复制代码
  1. 让我们创建流 dwd_order_detail,通过商品信息对原始交易数据进行数据扩维。当ods_order 有新数据插入时,dwd_order_detail 会即时增量刷新,最新的、经过扩维的交易信息会自动写入。

CREATE STREAM dwd_order_detail(id, ts, prod_id, prod_name, prod_detail)AS (   SELECT      ods_order.id,      ods_order.ts,      ods_order.prod_id,       dim_prod.prod_name,      dim_prod.prod_detail    FROM STREAMING ALL ods_order   INNER JOIN dim_prod        ON ods_order.prod_id = dim_prod.id) PRIMARY KEY (id);
复制代码
  1. 准备商品数据

INSERT INTO dim_prod VALUES (    1,    'apple',    'fruit_001');
INSERT INTO dim_prod VALUES ( 2, 'cola', 'drink_001');
复制代码
  1. 让流表工作起来 - 插入操作 在第二步中我们通过 JOIN ods_order 和 dim_prod 创建了流 dwd_order_detail,一旦我们向 ods_order 中插入新数据,那么 dwd_order_detail表也会立即更新,展示出扩维后的新订单数据。

-- 订单 1INSERT INTO ods_order VALUES (    1,    1,    current_timestamp);-- 订单 2INSERT INTO ods_order VALUES (    2,    2,    current_timestamp);
复制代码

查询 dwd_order_detail,我们刚刚写入的数据自动经过扩维更新至表中。

SELECT * FROM dwd_order_detail;
id | ts | prod_id | prod_name | prod_detail----+----------------------------+---------+-----------+------------ 1 | 2024-08-01 15:50:23.117737 | 1 | apple | fruit_001 2 | 2024-08-01 15:50:35.115252 | 2 | cola | drink_001(2 rows)
复制代码
  1. 让流工作起来 - 更新操作 除了 INSERT, 流的上游的 UPDATE 操作,也会自动更新至下游:

-- 更新 cola -> pepsiUPDATE dim_prod SET prod_name = 'pepsi' WHERE id = 2;
复制代码

查看结果

SELECT * FROM dwd_order_detail;
id | ts | prod_id | prod_name | prod_detail----+----------------------------+---------+-----------+------------ 1 | 2024-08-01 15:50:23.117737 | 1 | apple | fruit_001 2 | 2024-08-01 15:50:35.115252 | 2 | pepsi | drink_001(2 rows)
复制代码
  1. 让流表工作起来 - 删除操作

-- 删除订单2DELETE FROM ods_order WHERE id = 2;
复制代码

查看结果

SELECT * FROM dwd_order_detail;
id | ts | prod_id | prod_name | prod_detail----+----------------------------+---------+-----------+------------ 1 | 2024-08-01 15:50:23.117737 | 1 | apple | fruit_001(1 row)
复制代码

了解更多

Domino 流计算使用灵活,功能强大

  1. 用 WHERE 条件直接进行过滤

  2. 多表 JOIN, UNION 等均可使用

  3. 可选追踪 INSERT / UPDATE / DELETE 操作


本文为 YMatrix 原创内容,未经允许不得转载。

欲了解更多超融合时序数据库相关信息,请访问 “YMatrix官方网站

发布于: 刚刚阅读数: 4
用户头像

MatrixDB 超融合时序数据库 2021-10-28 加入

全球超融合时序数据库开创者,专为物联网、车联网、工业互联网和智慧城市提供一站式数据平台。

评论

发布
暂无评论
Domino 流计算快速上手 - 1. 扩维_数据库_YMatrix 超融合数据库_InfoQ写作社区