Feldera项目实战教程:构建首个SQL流处理管道
引言
Feldera是一个基于增量视图维护(IVM)技术的流式SQL处理引擎。本教程将带您完成在Feldera中构建和测试第一个SQL流处理管道的全过程,通过一个供应链价格监控的实际案例,演示如何利用标准SQL实现实时数据处理。
案例背景
我们将构建一个供应链价格监控系统,该系统需要:
- 接收供应商、零件和价格数据
- 实时计算每个零件在所有供应商中的最低价格
- 跟踪提供最低价格的优选供应商信息
环境准备
确保Feldera服务已启动并运行,可以通过Web控制台访问Feldera管理界面。
创建SQL管道
第一步:定义数据模型
在Feldera中创建名为"supply_chain"的管道,并输入以下SQL代码:
-- 供应商表定义
create table VENDOR (
id bigint not null primary key,
name varchar,
address varchar
) with ('materialized' = 'true');
-- 零件表定义
create table PART (
id bigint not null primary key,
name varchar
) with ('materialized' = 'true');
-- 价格表定义
create table PRICE (
part bigint not null,
vendor bigint not null,
price integer
) with ('materialized' = 'true');
关键点说明:
- 使用标准SQL的
CREATE TABLE
语法定义流式数据输入 materialized = 'true'
表示Feldera将持久化存储表数据- 与传统数据库不同,这些表定义不涉及数据存储位置,仅描述数据结构
第二步:创建业务视图
-- 计算每个零件的最低价格
create view LOW_PRICE (
part,
price
) as
select part, MIN(price) as price from PRICE group by part;
-- 获取优选供应商详细信息
create materialized view PREFERRED_VENDOR (
part_id,
part_name,
vendor_id,
vendor_name,
price
) as
select
PART.id as part_id,
PART.name as part_name,
VENDOR.id as vendor_id,
VENDOR.name as vendor_name,
PRICE.price
from
PRICE,
PART,
VENDOR,
LOW_PRICE
where
PRICE.price = LOW_PRICE.price AND
PRICE.part = LOW_PRICE.part AND
PART.id = PRICE.part AND
VENDOR.id = PRICE.vendor;
视图设计要点:
LOW_PRICE
视图计算每个零件的最低价格PREFERRED_VENDOR
是物化视图,存储完整的优选供应商信息- 视图可以基于其他视图构建,形成处理流水线
- 物化视图可随时查询,非物化视图只能观察变更流
数据操作与验证
初始数据加载
通过控制台的"Ad-hoc查询"功能插入测试数据:
-- 插入供应商数据
INSERT INTO VENDOR (id, name, address) VALUES
(1, 'Gravitech Dynamics', '222 Graviton Lane'),
(2, 'HyperDrive Innovations', '456 Warp Way'),
(3, 'DarkMatter Devices', '333 Singularity Street');
-- 插入零件数据
INSERT INTO PART (id, name) VALUES
(1, 'Flux Capacitor'),
(2, 'Warp Core'),
(3, 'Kyber Crystal');
-- 插入价格数据
INSERT INTO PRICE (part, vendor, price) VALUES
(1, 2, 10000),
(2, 1, 15000),
(3, 3, 9000);
数据验证
查询物化视图确认计算结果:
SELECT part_name, vendor_name FROM PREFERRED_VENDOR;
预期结果应显示每个零件的当前优选供应商。
增量计算演示
Feldera的核心能力是增量计算,让我们通过添加新价格记录来验证:
INSERT INTO PRICE (part, vendor, price) VALUES
(2, 3, 12000); -- 为Warp Core添加更低价格
通过"变更流"选项卡观察:
PRICE
表新增一条记录LOW_PRICE
视图更新Warp Core的最低价格PREFERRED_VENDOR
视图删除旧记录并插入新记录
技术要点解析
-
增量视图维护(IVM):
- 只计算受输入变更影响的部分结果
- 资源消耗与变更规模成正比,而非整体数据量
- 自动处理视图间的级联更新
-
物化与非物化视图:
- 物化视图:可查询完整状态,适合需要快照的场景
- 非物化视图:只能观察变更流,适合实时处理场景
-
管道生命周期:
- 运行时可接收持续更新
- 停止后会清空所有计算状态
- 支持暂停时执行查询操作
最佳实践建议
- 对于需要频繁查询的结果,使用物化视图
- 复杂计算可分解为多个视图,提高可维护性
- 通过变更流调试数据处理逻辑
- 生产环境建议使用连接器而非ad-hoc查询输入数据
总结
通过本教程,您已经掌握了Feldera的核心概念和基本操作。关键收获包括:
- 使用标准SQL定义流处理逻辑
- 理解增量计算的原理和优势
- 掌握物化视图的应用场景
- 学会验证和调试流处理管道
下一步可以探索更复杂的业务场景,如多表关联、窗口计算和错误处理等高级功能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考