LakeSoul Flink Connector 使用指南

LakeSoul Flink Connector 使用指南

LakeSoul lakesoul-io/LakeSoul: 是一个基于区块链和人工智能技术的去中心化社交平台。适合对区块链技术和人工智能有兴趣的人,特别是想探索这些技术在社交场景下应用的人。特点是采用了区块链技术保障用户隐私和数据安全,同时结合人工智能技术实现智能匹配和推荐功能。 LakeSoul 项目地址: https://gitcode.com/gh_mirrors/la/LakeSoul

LakeSoul 是一个高性能的湖仓一体存储框架,其 Flink Connector 实现了 Flink 的动态表接口,开发者可以通过 Flink 的 DataStream API、Table API 或 SQL 来读写 LakeSoul 数据,同时支持流式和批处理模式。本文将详细介绍如何使用 LakeSoul Flink Connector 进行数据操作。

1. 环境准备

1.1 版本兼容性

  • LakeSoul 2.3.0 版本对应 Flink 1.14
  • LakeSoul 2.4.0 及以上版本对应 Flink 1.17
  • LakeSoul 3.0.0 及以上版本对应 Flink 1.20

1.2 依赖配置

下载 lakesoul-flink-1.20-VAR::VERSION.jar 文件作为依赖。

1.3 启动 Flink SQL Client

bin/sql-client.sh embedded -j lakesoul-flink-1.20-VAR::VERSION.jar

2. 表操作

2.1 创建 Catalog

LakeSoul 提供了专门的 Catalog 实现,用于管理 LakeSoul 表。

2.1.1 使用 Flink SQL
CREATE CATALOG lakesoul WITH('type'='lakesoul');
USE CATALOG lakesoul;
SHOW DATABASES;
USE `default`;
SHOW TABLES;
2.1.2 使用 Table API
TableEnvironment tEnv = TableEnvironment.create(EnvironmentSettings.inBatchMode());
Catalog lakesoulCatalog = new LakeSoulCatalog();
tEnv.registerCatalog("lakeSoul", lakesoulCatalog);
tEnv.useCatalog("lakeSoul");
tEnv.useDatabase("default");

2.2 创建表

LakeSoul 支持创建多种类型的表,包括带主键表、不带主键表、带分区表以及 CDC 格式表。

2.2.1 关键参数说明

| 参数 | 说明 | 示例 | |------|------|------| | PARTITIONED BY | 指定分区字段 | PARTITIONED BY (date) | | PRIMARY KEY | 指定主键 | PRIMARY KEY (id, name) NOT ENFORCED | | connector | 数据源类型 | 'connector'='lakesoul' | | hashBucketNum | 主键表必须设置的哈希桶数量 | 'hashBucketNum'='4' | | path | 表存储路径 | 'path'='file:///tmp/lakesoul/flink/sink/test' | | use_cdc | 是否为 CDC 格式表 | 'use_cdc'='true' |

2.2.2 创建表示例
CREATE TABLE `lakesoul`.`default`.test_table (
    `id` INT,
    name STRING,
    score INT,
    `date` STRING,
    region STRING,
    PRIMARY KEY (`id`,`name`) NOT ENFORCED
) PARTITIONED BY (`region`,`date`)
WITH (
    'connector'='lakesoul',
    'hashBucketNum'='4',
    'use_cdc'='true',
    'path'='file:///tmp/lakesoul/flink/sink/test'
);

2.3 删除表

DROP TABLE IF EXISTS test_table;

3. 数据写入

3.1 必要配置

  1. 必须开启检查点配置:
    SET 'execution.checkpointing.checkpoints-after-tasks-finish.enabled' = 'true';
    
  2. 流式写入需设置检查点间隔(建议大于1分钟):
    SET 'execution.checkpointing.interval' = '2min';
    
  3. 设置时区:
    SET 'table.local-time-zone' = 'Asia/Shanghai';
    

3.2 写入方式

3.2.1 批处理写入
INSERT INTO `lakesoul`.`default`.test_table 
VALUES (1, 'AAA', 98, '2023-05-10', 'China');
3.2.2 流式写入
INSERT INTO `lakesoul`.`default`.test_table 
SELECT * FROM `lakesoul`.`cdcsink`.source_table;

3.3 批量更新与删除

LakeSoul 2.4+ 版本支持 Flink 批处理模式的更新和删除操作:

-- 更新操作
UPDATE test_table SET score = 100 WHERE id = 1;

-- 删除操作
DELETE FROM test_table WHERE id = 2;

注意:更新操作不允许修改主键和分区列的值。

4. 数据查询

4.1 执行模式设置

-- 流模式
SET execution.runtime-mode = streaming;

-- 批模式
SET execution.runtime-mode = batch;

4.2 查询选项

查询时可通过 /*+ OPTIONS() */ 指定查询参数:

| 参数 | 说明 | 示例 | |------|------|------| | readtype | 读取类型:增量(incremental)或快照(snapshot) | 'readtype'='incremental' | | discoveryinterval | 流式增量读取发现新数据间隔(ms) | 'discoveryinterval'='10000' | | readstarttime | 开始读取时间戳 | 'readstarttime'='2023-05-01 15:15:15' | | readendtime | 结束读取时间戳 | 'readendtime'='2023-05-01 15:20:15' | | timezone | 时间戳时区 | 'timezone'='Asia/Shanghai' |

4.3 查询示例

4.3.1 全量读取
-- 批模式
SET execution.runtime-mode = batch;
SELECT * FROM test_table WHERE region='China' AND `date`='2023-05-10';

-- 流模式
SET execution.runtime-mode = streaming;
SELECT * FROM test_table WHERE id > 3;
4.3.2 快照读取
SELECT * FROM test_table /*+ OPTIONS('readtype'='snapshot', 'readendtime'='2023-05-01 15:20:15')*/ 
WHERE region='China';
4.3.3 增量范围读取
SELECT * FROM test_table /*+ OPTIONS('readtype'='incremental', 'readstarttime'='2023-05-01 15:15:15', 'readendtime'='2023-05-01 15:20:15')*/ 
WHERE region='China';
4.3.4 流式读取
SELECT * FROM test_table /*+ OPTIONS('readstarttime'='2023-05-01 15:15:15')*/ 
WHERE region='China';

4.4 Lookup Join

LakeSoul 支持 Flink 的 Lookup Join,适用于小维度表关联场景:

-- 创建维度表
CREATE TABLE customers (
    `c_id` INT,
    `name` STRING,
    PRIMARY KEY (`c_id`) NOT ENFORCED
) WITH (
    'connector'='lakesoul',
    'hashBucketNum'='1',
    'path'='file:///tmp/lakesoul/flink/sink/customers'
);

-- 创建事实表
CREATE TABLE orders (
    `o_id` INT,
    `o_c_id` INT,
    PRIMARY KEY (`o_id`) NOT ENFORCED
) WITH (
    'connector'='lakesoul',
    'hashBucketNum'='1',
    'path'='file:///tmp/lakesoul/flink/sink/orders',
    'lookup.join.cache.ttl'='60s'
);

-- Lookup Join 查询
SELECT `o_id`, `c_id`, `name`
FROM (SELECT *, proctime() as proctime FROM orders) as o
JOIN customers FOR SYSTEM_TIME AS OF o.proctime
ON c_id = o_c_id;

5. 配置参数

可在 flink-conf.yaml 中配置以下参数,或在建表时指定:

| 配置项 | 默认值 | 说明 | |-------|-------|------| | lakesoul.file.rolling.rows | 5000000 | 单个文件最大行数 | | lakesoul.file.rolling.time.ms | 300000 | 创建新文件间隔(ms) | | lakesoul.rolling.check.interval | 60000 | 检查间隔(ms) |

通过本文介绍,开发者可以充分利用 LakeSoul Flink Connector 实现高效的数据湖操作,满足批处理和流处理的各种场景需求。

LakeSoul lakesoul-io/LakeSoul: 是一个基于区块链和人工智能技术的去中心化社交平台。适合对区块链技术和人工智能有兴趣的人,特别是想探索这些技术在社交场景下应用的人。特点是采用了区块链技术保障用户隐私和数据安全,同时结合人工智能技术实现智能匹配和推荐功能。 LakeSoul 项目地址: https://gitcode.com/gh_mirrors/la/LakeSoul

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

洪显彦Lawyer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值