Apache Doris Routine Load快速体验之案例(2)

文章介绍了如何使用ApacheDoris的RoutineLoad功能从Kafka流式数据源实时导入数据,包括创建Doris测试表、建立RoutineLoad任务和处理可能出现的问题,如数据错误和Kafka主题分区获取失败等。

环境信息

硬件信息

  1. CPU :4C
  2. CPU型号:ARM64
  3. 内存 :10GB
  4. 硬盘 :66GB SSD

软件信息

  1. VM镜像版本 :CentOS-7
  2. Apahce Doris版本 :1.2.4.1
  3. Kafka版本:3.2.0

Routine Load介绍

Routine Load适合Kafka直接实时写数据到Doris的场景;它支持用户提交一个常驻的导入任务,通过不断地从指定的数据源中读取数据,将数据导入到 Doris 中。

在这里插入图片描述

如上图,Client 向 FE 提交一个Routine Load 作业。

  1. FE 通过 JobScheduler 将一个导入作业拆分成若干个 Task。每个 Task 负责导入指定的一部分数据。Task 被 TaskScheduler 分配到指定的 BE 上执行。
  2. 在 BE 上,一个 Task 被视为一个普通的导入任务,通过 Stream Load 的导入机制进行导入。导入完成后,向 FE 汇报。
  3. FE 中的 JobScheduler 根据汇报结果,继续生成后续新的 Task,或者对失败的 Task 进行重试。
  4. 整个 Routine Load 作业通过不断的产生新的 Task,来完成数据不间断的导入。

Routine Load案例

创建Doris结果测试表

-- 创建测试库
create database routine_load;

-- 切换为测试库
use routine_load;

-- 创建测试结果表
CREATE TABLE rl_test01 (
  `id` varchar(1000) NULL COMMENT "来源库表键"
<think>首先,用户的问题是关于DorisRoutine Load,针对JSON格式数据,如何设置只过滤那些包含特定字段(如“header”和“body”)的数据。用户提到了参考站内引用,但这些引用是关于Doris性能参数的(如doris_scan_range_row_count),与JSON过滤无直接关联。系统指令要求我参考用户上一次的问题和我的回答,但这是新对话的开端,所以没有历史上下文。 关键点: - 用户的问题:在Routine Load中,如何过滤JSON数据,只保留有“header”和“body”模块的数据。 - 提供的引用:[1]提到doris_scan_range_row_count等参数,[2]和[3]也类似,这些是关于扫描和性能优化的,不直接相关。 - 系统指令:必须使用中文回答;生成相关问题;结构清晰;使用$...$和$$...$$格式;添加引用标识。 我需要基于Doris的知识来回答。Doris是一个分布式SQL数据库,支持Routine Load从Kafka等数据源加载数据。对于JSON数据,通常使用CREATE ROUTINE LOAD语句,并在其中指定JSON路径或过滤条件。 在Doris中,Routine Load允许使用WHERE子句来过滤数据。用户想要只加载那些包含“header”和“body”字段的数据。这意味着我需要建议一种方式来检查JSON对象是否有这些字段。 可能的解决方案: - 在Routine Load的定义中,使用WHERE子句结合JSON函数。 - Doris支持JSON函数如json_extract或json_exists。 - 例如,检查json_extract(json_column, '$.header') IS NOT NULL AND json_extract(json_column, '$.body') IS NOT NULL。 结构化我的回答: 1. **理解问题**:解释用户的需求。 2. **解决方案**:提供具体的SQL示例。 3. **步骤**:如何创建Routine Load。 4. **注意事项**:可能的问题或最佳实践。 5. **生成相关问题**:如系统指令所要求。 生成相关问题: - 基于主题,如其他过滤条件、JSON处理等。 - 例如: 1. 如何处理JSON嵌套数据? 2. Routine Load的性能优化技巧? 3. Doris支持哪些JSON函数? 引用处理: - 用户提供了引用[^1], [^2], [^3],但这些是关于性能参数的,不直接相关。 - 我需要自然地添加引用标识在相关段落末尾。既然引用不直接相关,我可以忽略它们或只在必要时引用。 - 系统指令说:“回答中引用的段落末尾自然地添加引用标识”,但在这里,引用不适用于用户的查询,所以我可以不引用它们,专注于问题。 最终回答结构: - 确认问题。 - 提供逐步解决方案。 - 包括SQL代码示例。 - 添加相关问题。 - 确保使用中文。 </think>### Doris Routine Load中过滤JSON数据的方法 针对您的查询,在Doris中使用Routine Load加载JSON格式数据时,如果只想加载那些包含“header”和“body”模块(即字段)的数据,可以通过在`CREATE ROUTINE LOAD`语句中添加`WHERE`子句来实现。Doris支持JSON函数(如`json_extract()`或`json_exists()`),这些函数允许您检查JSON对象的字段是否存在。下面我将逐步解释如何设置,确保结构清晰易懂。 #### 步骤1: 理解核心方法 - DorisRoutine Load支持数据过滤,您可以使用`WHERE`子句结合JSON函数来筛选符合条件的JSON记录。 - 关键函数: - `json_extract(json_column, '$.path')`: 提取JSON字段的值,如果字段不存在则返回NULL。 - `WHERE`条件: 检查`json_extract(json_column, '$.header') IS NOT NULL AND json_extract(json_column, '$.body') IS NOT NULL`,这确保只有同时包含header和body字段的数据才会被加载。 - 您的JSON数据需要存储在表的一个列中(例如名为`json_data`的列),该列必须定义为Doris支持的JSON类型(如`JSON`或`VARCHAR`)。 #### 步骤2: 创建示例Routine Load语句 假设您有一个Kafka数据源,主题名为`doris_topic`,且Doris表中的目标列名为`json_data`(类型为JSON)。以下是完整的`CREATE ROUTINE LOAD`命令模板: ```sql CREATE ROUTINE LOAD test_db.example_load ON your_table_name COLUMNS(json_data) -- 指定目标表中的JSON列名 PROPERTIES ( "format" = "json", -- 指定数据格式为JSON "jsonpaths" = "[\"$.*\"]" -- 可选: 如果需要指定JSON路径映射 ) FROM KAFKA ( "kafka_broker_list" = "broker_host:port", "kafka_topic" = "doris_topic", "property.group.id" = "doris_group" ) WHERE json_extract(json_data, '$.header') IS NOT NULL AND json_extract(json_data, '$.body') IS NOT NULL; -- 过滤条件,只保留有header和body的数据 ``` **关键参数解释**: - `COLUMNS(json_data)`: 指定目标表中的JSON列,确保该列能存储完整JSON对象。 - `WHERE`子句: 使用`json_extract`检查字段是否存在。如果JSON数据中header或body缺失,该行会被自动过滤掉。 - **注意事项**: - 确保您的Doris版本支持JSON函数(建议Doris 1.2+版本)。 - 如果JSON字段是嵌套的(例如`$.header.id`),路径需正确指定。 - 性能优化: 对于高并发场景,如果过滤操作影响吞吐量,可以参考性能参数如`doris_scanner_queue_size`调整队列大小[^1],但这与过滤无关,仅用于负载优化。 #### 步骤3: 验证和测试 - 创建Routine Load后,使用命令`SHOW ROUTINE LOAD FOR example_load;`监控状态。检查`LoadedRows`和`FilteredRows`指标,确认过滤是否生效。 - 如果数据加载失败或过滤不准确,可能原因包括: - JSON路径错误:确保路径`'$.header'`匹配您的数据格式(例如,大小写敏感)。 - 数据类型不匹配:目标表列必须是JSON或STRING类型。 - 参考Doris文档:更多JSON处理细节,见[官方JSON支持文档](https://doris.apache.org/zh-CN/docs/sql-manual/sql-functions/json-functions/)。 通过以上设置,您可以高效地过滤掉不包含header和body的JSON数据,只加载所需记录。如果您需要处理更复杂的条件(如字段值过滤),可以扩展`WHERE`子句。 ### 相关问题 1. Doris中如何解析JSON嵌套字段(如过滤header中的特定值)? 2. Routine Load在高并发下如何优化性能?例如调整`doris_scanner_queue_size`等参数的影响[^1]。 3. Doris支持哪些其他JSON函数(如json_keys或json_contains)?
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大数据AI智能圈

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

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

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

打赏作者

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

抵扣说明:

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

余额充值