如何创建Doris数据表和Doris ROUTINE LOAD

本文介绍了如何使用Doris数据库系统通过Kafka流处理创建数据表并实现数据实时加载的过程,包括登录服务器、选择数据库、创建分区表以及监控数据装入任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步:切换用户

su - doris

第二步:登录至目标服务器

mysql -h 10.68.90.11 -P 39030

第三步:选择要操作的目标数据库

use tonly_data

第四步:创建数据表

CREATE TABLE `test_tonly_location`
(
  `upload_time` datetime NULL COMMENT "",
  `vin` varchar(32) NULL COMMENT "",
  `tbox_vin` varchar(32) NULL COMMENT "",
  `gps_x` float NULL COMMENT "",
  `gps_y` float NULL COMMENT "",
  `bd_x` float NULL COMMENT "",
  `bd_y` float NULL COMMENT "",
  `speed` int(11) NULL COMMENT "",
  `angle` int(11) NULL COMMENT "",
  `quadrant` int(11) NULL COMMENT "",
  `altitude` int(11) NULL COMMENT "",
  `cgq_x` float NULL COMMENT "",
  `cgq_y` float NULL COMMENT "",
  `cgq_z` float NULL COMMENT "",
  `source_table` datetime NULL COMMENT ""
) ENGINE = OLAP DUPLICATE KEY(`upload_time`, `vin`)
PARTITION BY RANGE(`upload_time`)
(
START ("2023-08-25") END ("2023-09-05") EVERY (INTERVAL 1 day)
)
DISTRIBUTED BY HASH(`vin`) BUCKETS 32
PROPERTIES (
"replication_num" = "2",
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.time_zone" = "Asia/Shanghai",
"dynamic_partition.start" = "-100",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "32",
"in_memory" = "false",
"storage_format" = "DEFAULT"
);

第五步:创建Doris ROUTINE LOAD

CREATE
ROUTINE LOAD
from_kafka_test_tonly_location ON test_tonly_location
COLUMNS TERMINATED BY ",",
COLUMNS (upload_time,
vin,
tbox_vin,
gps_x,
gps_y,
bd_x,
bd_y,
speed,
angle,
quadrant,
altitude,
cgq_x,
cgq_y,
cgq_z,
source_table)
PROPERTIES
(
    "desired_concurrent_number"="3",
    "max_error_number"="1000",
    "max_batch_interval"="60",
    "max_batch_rows"="200000"
)
FROM KAFKA
(
    "kafka_broker_list"= "10.68.90.11:9092,10.68.90.12:9092,10.68.90.13:9092",
    "kafka_topic" = "test_tonly_location",
    "property.group.id" = "test_tonly_location_group"
);

第六步:查看数据装入任务

show routine load;

show routine load for from_kafka_test_tonly_location \G

<think>首先,用户的问题是关于“Doris数据导入同步方法实现方式”。用户提到“将数据从一个系统同步到Doris数据库”,可能涉及ETL过程、数据导入或与其他系统的数据集成。从系统指令中,我需要: -所有行内数学表达式使用$...$格式。 -独立公式使用$$...$$格式并单独成段。 -LaTeX语法正确。-使用中文回答。-生成相关问题。 -在回答中引用的段落末尾自然地添加引用标识,例如[^1]。 -回答结构清晰,帮助用户逐步解决问题,尽量保证回答真实可靠。参考站内引用: -引用[1]: Doris数据导入导出,提到导入作业是事务性的,包括BrokerLoadINSERT语句。 -引用[2]: Doris数据导入,介绍了外部表Multi-CatalogRoutineLoad(Kafka集成)。 -引用[3]: Doris数据导入四:BinlogLoad方式,描述了通过Binlog接收数据。这些引用表明Doris支持多种数据导入方式,如BrokerLoad、INSERT、RoutineLoad、BinlogLoad等。 用户意图:用户想了解如何同步数据从一个系统到Doris,可能涉及实时或批量同步、ETL过程。 我的回答结构:1.**介绍Doris数据导入概述**:简要解释Doris的数据导入机制。 2. **详细说明各种同步方法**:列出并解释常见的导入方式,如BrokerLoadRoutineLoad、BinlogLoad、INSERT等。 3. **实现方式**:对每种方法,描述如何实现,包括步骤或示例。4.**引用相关部分**:在解释时,自然地添加引用标识。 5. **生成相关问题**:在回答末尾添加相关问题部分。确保使用中文回答。 生成相关问题:-基于用户的问题,生成3-5个相关问题,例如:1.Doris数据导入的性能优化方法?2.如何选择适合的Doris数据导入方式?3.Doris数据导入的常见错误及解决方案?4.Doris与其他数据库的集成方式? 现在,构建回答:**回答结构**: -开头:概述Doris数据导入的重要性。 -主体:分点介绍各种同步方法。- BrokerLoad-Routine Load- Binlog Load- INSERT语句-其他方式(如Stream Load) -结尾:总结建议。-相关问题部分。 在描述中,自然地添加引用。例如: -当提到Broker Load时,引用[1]。 -当提到Routine Load时,引用[2]。 -当提到Binlog Load时,引用[3]。由于引用是站内的,我需要确保在回答中正确引用。最后,添加相关问题。</think>### Doris 数据导入同步方法实现方式 在 Doris 数据库中,数据导入(同步)是将数据从外部系统(如 MySQL、Kafka、HDFS 等)高效、可靠地加载到 Doris 表的过程。Doris 支持多种导入方式,每种方式都基于事务机制,确保数据原子性一致性[^1]。以下我将详细介绍常见的同步方法、实现步骤适用场景,帮助您根据实际需求选择合适的方式。所有方法均支持 ETL 过程(如数据清洗转换),并与其他系统(如数据仓库或流处理平台)无缝集成。 #### 1. **Broker Load(批量导入)** - **描述**:Broker Load 是一种批量导入方式,适用于从 HDFS、S3 等存储系统导入大量数据。它通过 Doris 的 Broker 进程代理访问外部存储,支持文件格式如 Parquet、ORC、CSV 等。导入作业作为一个完整事务,确保数据原子生效[^1]。 - **实现步骤**: 1. **准备数据源**:将数据文件上传到 HDFS 或 S3。 2. **创建导入作业**:使用 SQL 命令定义导入任务,指定文件路径、格式表映射。 ```sql LOAD LABEL example_label ( DATA INFILE("hdfs://path/to/data.csv") INTO TABLE my_table COLUMNS TERMINATED BY "," ) WITH BROKER "broker_name"; ``` 3. **监控作业**:通过 Doris 的 Web UI 或 `SHOW LOAD` 命令检查状态(如 `FINISHED` 或 `CANCELLED`)。 - **适用场景**:大数据量的离线批处理,例如每日数据仓库同步。性能取决于网络带宽文件大小,一般支持 TB 级数据导入。 - **优点**:高吞吐、支持压缩;**缺点**:延迟较高(分钟级),不适合实时同步。 #### 2. **Routine Load(流式导入)** - **描述**:Routine Load 用于从消息队列(如 Kafka)实时导入数据。它通过消费者组持续订阅消息,自动分发到 Doris 表。支持数据过滤转换,适用于流处理场景[^2]。 - **实现步骤**: 1. **设置 Kafka**:确保 Kafka 集群运行,并创建 topic(如 `doris_topic`)。 2. **创建导入作业**:定义 Routine Load 任务,指定 Kafka broker、topic 表映射。 ```sql CREATE ROUTINE LOAD example_load ON my_table PROPERTIES ( "desired_concurrent_number" = "3" ) FROM KAFKA ( "kafka_broker_list" = "broker1:9092", "kafka_topic" = "doris_topic" ); ``` 3. **数据处理**:Doris 自动将消息分批导入,每批作为一个事务提交。可通过 `SHOW ROUTINE LOAD` 监控进度。 - **适用场景**:实时数据同步,例如日志采集或 IoT 设备数据流。延迟低至秒级。 - **优点**:自动容错、支持并行消费;**缺点**:需维护 Kafka 集群,消息顺序可能受影响[^2]。 #### 3. **Binlog Load(变更数据捕获)** - **描述**:Binlog Load 专用于从 MySQL 等关系数据库同步增量数据(如 INSERT/UPDATE/DELETE)。它通过订阅数据库的 binlog 事件,实时捕获变更并导入 Doris。原理是 Doris 作为消费者接收 binlog 数据,并分发到不同 channel 处理[^3]。 - **实现步骤**: 1. **启用 MySQL binlog**:在 MySQL 中配置 `binlog_format=ROW` 并授权 Doris 访问。 2. **创建同步作业**:使用 SQL 定义 Binlog Load 任务,指定 MySQL 连接信息。 ```sql CREATE SYNC JOB example_sync FROM MYSQL ( "host" = "mysql_host", "port" = 3306, "user" = "user", "password" = "password", "database" = "db_name", "table" = "source_table" ) INTO DORIS_TABLE "target_table"; ``` 3. **监控与恢复**:Doris 自动处理断点续传;通过 `SHOW SYNC JOB` 查看状态。 - **适用场景**:数据库实时同步,例如 OLTP 到 OLAP 的数据迁移。延迟在毫秒到秒级。 - **优点**:精确捕获增量变更、低延迟;**缺点**:仅支持 MySQL 兼容源,配置较复杂[^3]。 #### 4. **INSERT 语句(手动导入)** - **描述**:通过标准 SQL INSERT 语句导入单条或小批量数据,适用于测试或小规模同步。每个 INSERT 作为一个事务,保证原子性[^1]。 - **实现步骤**: 1. **直接执行 SQL**:在 Doris 客户端或 JDBC 连接中运行 INSERT。 ```sql INSERT INTO my_table (col1, col2) VALUES (1, 'data'), (2, 'more_data'); ``` 2. **批量导入**:结合 `SELECT` 语句从其他表或外部查询导入。 ```sql INSERT INTO target_table SELECT * FROM external_table; ``` - **适用场景**:开发测试或小数据量实时插入。性能有限,不适合大数据。 - **优点**:简单易用;**缺点**:吞吐低,高并发可能阻塞集群。 #### 总结建议 - **批量同步**:优先用 Broker Load(HDFS/S3)或 INSERT(小数据)。 - **实时同步**:选 Routine Load(Kafka 流)或 Binlog Load(MySQL 变更)。 - **最佳实践**:结合 ETL 工具(如 Apache Flink)进行数据清洗;监控导入延迟错误率确保可靠性。导入性能优化包括调整并发参数(如 Routine Load 的 `desired_concurrent_number`)分区设计[^1][^2]。 如果您提供更多细节(如源系统类型或数据规模),我可以给出更定制化的方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值