(二十)Flink Paimon

数据湖、湖仓一体是当前大数据领域技术发展的重要趋势。近几年开源数据湖技术如 Apache Hudi、Apache Iceberg、Apache Paimon、DeltaLake 等不断涌现,基于湖仓一体架构的统一元数据管理、数据治理也越来越受到关注。从传统数仓到数据湖、湖仓一体架构,从流批一体计算到基于数据湖的流批一体存储,越来越多的企业基于开源技术,在集成、计算、存储、查询分析等方面不断优化,建设形成适合自身业务发展的湖仓平台。本章我们将介绍 Apache Paimon 的概念以及 Flink Paimon 相关的实现方式。

目录

Apache Paimon 简介

Apache Paimon 基本概念

总结


Apache Paimon 简介

Apache Paimon 是一个流数据湖平台,具有高速数据摄取、变更日志跟踪和高效的实时分析的能力。2022 年 1 月,Flink Table Store 诞生,孵化一年后,2023 年 1 月,产生了正式 0.3 的版本,之后从 Flink 社区迁到 Apache 社区,并改名为 Apache Paimon,不再是 Flink 存储,而是面向社区所有计算引擎的存储。

图

### 使用 FlinkPaimon 进行数据操作 #### 创建环境并初始化依赖项 为了使 Flink 应用程序能够与 Paimon 配合工作,需确保项目中包含了必要的库文件。通常这可以通过 Maven 或 Gradle 来管理依赖关系来完成。 对于Maven配置如下: ```xml <dependency> <groupId>org.apache.paimon</groupId> <artifactId>paimon-flink_2.12</artifactId> <version>${paimon.version}</version> </dependency> ``` #### 插入数据Paimon 表 下面是一个简单的例子展示了如何利用 `INSERT INTO` SQL 语法向 Paimon 表写入新记录[^4]。 ```sql CREATE TABLE orders ( order_id BIGINT, product STRING, quantity INT, price DECIMAL(10, 2), PRIMARY KEY (order_id) NOT ENFORCED ) PARTITIONED BY (`dt`) WITH ( 'connector' = 'filesystem', 'path' = '/path/to/paimon/table' ); INSERT INTO orders VALUES (1L,'book',3,98.7),(2L,'pen',5,12.3); ``` 这段SQL命令首先定义了一个名为 "orders" 的表结构,并指定了分区字段以及所使用的连接器类型;接着使用 INSERT INTO 将两条测试订单的数据插入到了该表内。 #### 查询 Paimon 中的数据 当需要读取存储于 Paimon 文件系统上的数据时,则可以执行标准的 SELECT 查询语句: ```sql SELECT * FROM orders WHERE dt='2023-06-01'; ``` 此查询会返回日期为指定值的所有订单详情。 #### 实现流式处理逻辑 除了批量加载外,还可以借助Flink强大的实时计算能力来进行增量更新或持续监控变化。这里给出一段基于DataStream API的操作实例代码片段用于展示这一过程[^1]: ```java import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.table.api.bridge.java.StreamTableEnvironment; public class OrderProcessingJob { public static void main(String[] args) throws Exception { final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // Create Table Environment from the given Execution environment. final StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env); String createOrdersDDL = "CREATE TABLE Orders (\n" + " orderId BIGINT,\n" + " productName STRING,\n" + " amount DOUBLE\n" + ") WITH (\n" + " 'connector' = 'kafka',\n" + " 'topic' = 'input-topic'\n" + ")"; String sinkDDL = "CREATE TABLE SinkTable(\n" + "orderId BIGINT,\n" + "productName STRING,\n" + "amount DOUBLE\n"+ ")WITH(\n" + "'connector' = 'filesystem',\n" + "'format' = 'parquet',\n" + "'path' = '/output/path'" ");"; tableEnv.executeSql(createOrdersDDL); tableEnv.executeSql(sinkDDL); // Registering source and sink tables... // Executing transformation logic... tableEnv.executeSql( "INSERT INTO SinkTable SELECT * FROM Orders" ); env.execute("Order Processing Job"); } } ``` 上述Java应用程序创建了两个表——一个是Kafka作为源头的消息队列,另一个是指定路径下的Paimon表作为目标位置。之后通过一条简单的SQL指令完成了从源至目的地之间的数据迁移任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

springk

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值