doris数据导入超详细教程

对于 Doris 来说,一个 INSERT 命令就是一个完整的导入事务。

因此不论是导入一条数据,还是多条数据,我们都不建议在生产环境使用这种方式进行数据导入。高频次的 INSERT 操作会导致在存储层产生大量的小文件,会严重影响系统性能。

该方式仅用于线下简单测试或低频少量的操作。

* INSERT INTO table SELECT ... 
* INSERT INTO table VALUES(...)

 导入本地数据

建表:

drop table if exists load_local_file_test;
CREATE TABLE IF NOT EXISTS load_local_file_test
(
    id INT,
    name VARCHAR(50),
    age TINYINT
)
unique key(id)
DISTRIBUTED BY HASH(id) BUCKETS 3;

 导入测试数据:

 

1,zss,28
2,lss,28
3,ww,88

执行 curl 命令导入本地文件:

 # 语法示例
 curl \
 -u user:passwd \  # 账号密码
 -H "label:load_local_file_test" \  # 本次任务的唯一标识
 -T 文件地址 \
 http://主机名:端口号/api/库名/表名/_stream_load
 
 
curl \
 -u root:123456 \
 -H "label:load_local_file" \
 -H "column_separator:," \
 -T /opt/data/loadfile.txt \
 http://hadoop11:8040/api/test/load_local_file_test/_stream_load

 导入成功:

 外部存储数据导入(hdfs)

建表

drop table if exists load_local_file_test;
CREATE TABLE IF NOT EXISTS load_local_file_test
(
    id INT,
    name VARCHAR(50),
    age TINYINT
)
unique key(id)
DISTRIBUTED BY HASH(id) BUCKETS 3
    PROPERTIES
(
    "replication_num" = "1"
);

 将本地的数据导入到hdfs上面

hdfs dfs -put loadfile.txt /

 导入格式:

语法示例:
LOAD LABEL test.label_202204(
[MERGE|APPEND|DELETE]  -- 不写就是append 
DATA INFILE
(
"file_path1"[, file_path2, ...]  -- 描述数据的路径   这边可以写多个 ,以逗号分割
)
[NEGATIVE]               -- 负增长
INTO TABLE `table_name`  -- 导入的表名字
[PARTITION (p1, p2, ...)] -- 导入到哪些分区,不符合这些分区的就会被过滤掉
[COLUMNS TERMINATED BY "column_separator"]  -- 指定分隔符
[FORMAT AS "file_type"] -- 指定存储的文件类型
[(column_list)] -- 指定导入哪些列 

[COLUMNS FROM PATH AS (c1, c2, ...)]  -- 从路劲中抽取的部分列
[SET (column_mapping)] -- 对于列可以做一些映射,写一些函数
-- 这个参数要写在要写在set的后面
[PRECEDING FILTER predicate]  -- 在mapping前做过滤做一些过滤
[WHERE predicate]  -- 在mapping后做一些过滤  比如id>10 

[DELETE ON expr] --根据字段去做一些抵消消除的策略  需要配合MERGE
[ORDER BY source_sequence] -- 导入数据的时候保证数据顺序
[PROPERTIES ("key1"="value1", ...)]  -- 一些配置参数

 将hdfs上的数据load到表中

LOAD LABEL test.label_20221125
(
DATA INFILE("hdfs://hadoop12:8020/loadfile.txt")
INTO TABLE `load_hdfs_file_test`
COLUMNS TERMINATED BY ","            
(id,name,age)
)
with HDFS (
"fs.defaultFS"="hdfs://hadoop12:8020",
"hadoop.username"="root"
)
PROPERTIES
(
"timeout"="1200",
"max_filter_ratio"="0.1"
);

查看表:

### 将ORC格式的数据导入Doris数据库的方法 #### 使用DataX工具进行数据迁移 对于将ORC格式文件中的数据迁移到Doris数据库的任务,可以借助阿里巴巴开源的大规模离线数据同步工具——DataX来实现。通过编写特定配置文件并执行Python脚本来启动此过程[^1]。 ```bash python gen_import_config.py -d doris_database_name -t target_table_name ``` 上述命令用于生成针对目标表的导入配置模板;其中`-d`参数指定目的端所在的数据库名称而`-t`则指明具体要写入哪张表格内。不过需要注意的是,在实际操作前还需进一步调整该配置文档以适应源ORC文件路径以及字段映射关系等细节情况。 #### 配置JSON设置项解析 为了使DataX能够识别来自HDFS上的ORC文件作为输入插件(reader),并且正确无误地把记录送至Apache Doris(即Palo)接收方(writer), 用户应当精心准备一份描述详尽的JSON格式设定档。下面给出了一部分关键性的选项说明: - **job.content[0].reader.name**: 应当被设为`hdfssync`, 表示采用适用于读取分布式文件系统的组件。 - **job.content[0].reader.parameter.path**: 此处需填写待处理ORC文件于Hadoop集群里的绝对地址,支持通配符匹配多个分区下的对象集合。 - **job.content[0].writer.name**: 设置成`dorissync`表明选用专门面向Doris的服务接口完成最终的数据落地工作。 - **job.content[0].writer.parameter.tableName**: 明确指出远程SQL引擎内部的目标逻辑结构体标识符(即Schema名加表名组合)。 - **job.content[0].column[]**: 列出所有参与传输列的名字及其对应类型转换规则,确保两端之间的一致性和兼容性。 #### Apache Flink的角色补充说明 尽管Flink主要服务于流计算场景,但在某些情况下也可以利用其批模式作业能力配合Table API来进行ETL流程开发。如果项目环境中已经部署有较为成熟的Flink生态,则不妨考虑将其纳入考量范围之内。特别是那些体积庞大、复杂度高的半结构化存储介质向关系型仓库转化的需求场合下,Flink凭借强大的表达能力和灵活多变的操作语义或许能提供额外的价值主张[^2]。 然而就单纯解决本次提出的关于Orc转储进入Doris的问题而言,优先推荐基于DataX构建解决方案会更加直接有效一些。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

呆呆不呆~

你的鼓励是我最开心的事情~

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

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

打赏作者

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

抵扣说明:

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

余额充值