数据导入

使用Insert方法同步数据

用户可以使用INSERT语句通过MySQL协议导入数据
INSERT语句的使用与MySQL等数据库中INSERT语句的使用类似。 INSERT语句支持以下两种语法:

插入表选择...
插入表值(...)

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

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

此方法仅用于简单的离线测试或低频小规模操作。
或者您可以使用以下方法进行批量插入操作:

插入 example_tbl 值
(1000,“百度1”,3.25)
(2000年,《百度2》,4.25)
(3000,“百度3”,5.25);

流负载

用于将本地文件导入到doris中。 Stream Load通过HTTP协议与Doris连接并交互。
该方法中涉及到的HOST:PORT都是对应的HTTP协议端口。
• BE 的 HTTP 协议端口,默认为 8040。
• FE 的 HTTP 协议端口,默认为 8030。
但必须保证客户端所在机器的网络能够连接到FE、BE所在机器。

--创建表
如果存在则删除表load_local_file_test;
如果不存在则创建表 load_local_file_test
(
id 整数,
名称 VARCHAR(50),
年龄 TINYINT
)
唯一键(id)
按 HASH(id) 桶 3 分布;
# 创建文件
1、zss、282、LSS,28
3、WW、88
# 导入数据
## 语法示例
卷曲\
-u user:passwd \ # 帐号密码
-H "label:load_local_file_test" \ # 该任务的唯一标识符
-T 文件地址\
http://主机名:端口号/api/库名称/表名称/_stream_load
# user:passwd 是在 Doris 中创建的用户。初始用户为admin/root,密码初始为空。
# host:port是BE的HTTP协议端口,默认是8040,可以在Doris集群WEB UI页面查看。
# label:您可以在Header中指定一个Label来唯一标识本次导入任务。
卷曲\
-u根:123 \
-H“标签:加载本地文件”\
-H“列分隔符:”\
-T /root/data/loadfile.txt \
http://doitedu01:8040/api/test/load_local_file_test/_stream_load

curl的一些可配置参数

  1. label:导入任务的标签。具有相同标签的数据不能多次导入。 (标签默认保留30分钟)
  2. column_separator:用于指定导入文件中的列分隔符,默认为\t。
  3. line_delimiter:用于指定导入文件中的换行符,默认为\n。
  4. columns:用于指定文件中的列与表中的列的对应关系。默认一一对应
  5. 其中:用于过滤导入文件中的数据
  6. max_filter_ratio:可以过滤的最大容忍数据比例(由于不规则数据等)。默认是零容忍。数据非规范化不包括按 where 条件过滤掉的行。
  7. partitions:用于指定为此导入设计的分区。如果用户可以确定数据对应的分区,建议指定此项。不满足这些分区的数据将被过滤掉。
  8. 超时:指定导入超时。单位秒。默认值为 600 秒。可设置范围为1秒~259200秒。
  9. 时区:指定用于此导入的时区。默认为东八区。该参数将影响所有导入的时区相关函数的结果。
  10. exec_mem_limit:导入内存限制。默认为 2GB。单位是字节。
  11. format:指定导入数据格式,默认为csv,支持json格式。
  12. read_json_by_line:布尔类型,true表示支持每行读取一个json对象,默认值为false。
  13. merge_type:数据的合并类型。它支持三种类型:APPEND、DELETE 和 MERGE。其中,APPEND为默认值,表示本批次的所有数据都需要追加到已有的数据上。 DELETE表示删除与这批数据具有相同key的数据。对于所有行,MERGE语义需要与删除条件结合使用,这意味着满足删除条件的数据将根据DELETE语义进行处理,其余的将根据APPEND语义进行处理。示例:-H“merge_type:MERGE”-H“删除:flag=1”
  14. delete:仅在MERGE下有意义,表示数据的删除条件 function_column.sequence_col:仅适用于UNIQUE_KEYS,同一key列下,保证value列根据source_sequence列进行REPLACE,source_sequence可以是其中的列数据源,或者可以是表结构中的列。

建议导入请求的数据大小控制在1-2GB以内。如果本地文件较多,可以批量并发提交。

导入json数据

#准备数据
{"id":1,"姓名":"柳岩","年龄":18}
{"id":2,"name":"tangyan","age":18}
{"id":3,"姓名":"金莲","年龄":18}
{"id":4,"姓名":"大朗","年龄":18}
{"id":5,"姓名":"庆庆","年龄":18}卷曲\
-u 根目录:\
-H“标签:load_local_file_json_20221126”\
-H“列:ID,姓名,年龄”\
-H“最大过滤器比率:0.1”\
-H“超时:1000”\
-H "exec_mem_limit:1G" \
-H“其中:id>1”\
-H“格式:json”\
-H“按行读取json:true”\
-H“合并类型:删除”\
-T /root/data/json.txt \
http://doitedu01:8040/api/test/load_local_file_test/_stream_load
-H“合并类型:追加”\
# id = 3的这条数据将被删除
-H“合并类型:合并”\
-H“删除:id=3”

外部存储数据导入(hdfs)

适用场景

• 源数据位于Broker可以访问的存储系统中,例如HDFS。
• 数据量在几十到几百GB级别。

基本原则

  1. 创建要提交导入的任务
  2. FE生成执行计划并将执行计划分发到多个BE节点(每个BE节点导入一部分数据)
  3. BE收到执行计划后开始执行,将数据从broker拉取到自己的节点
  4. 所有BE完成后,FE判断导入是否成功,并将结果返回给客户端
--创建新表
如果存在则删除表 load_hdfs_file_test1;
如果不存在则创建表 load_hdfs_file_test1
(
id 整数,
名称 VARCHAR(50),
年龄 TINYINT
)
唯一键(id)
按 HASH(id) 桶 3 分布;
导入本地数据到HDFShdfs dfs -put ./loadfile.txt hdfs://linux01:8020/
hdfs dfs -ls hdfs://linux01:8020/
--导入语法
加载标签测试.label_202204(
[MERGE|APPEND|DELETE] -- 如果你不写,就追加它。
数据输入文件
(
"file_path1"[, file_path2, ...] -- 描述数据的路径。这里可以写多个,用逗号分隔。
)
[负面] -- 负增长
INTO TABLE `table_name` -- 导入的表名
[PARTITION (p1, p2, ...)] -- 导入哪些分区,与这些分区不匹配的将被过滤掉
[COLUMNS TERMINATED BY "column_separator"] -- 指定分隔符
[FORMAT AS "file_type"] -- 指定要存储的文件类型
[(co​​lumn_list)] -- 指定要导入的列
[COLUMNS FROM PATH AS (c1, c2, ...)] -- 从路径中提取的部分列
[SET(column_mapping)] -- 可以对列做一些映射,写一些函数
-- 该参数需设置后写入
[PRECEDING FILTER predicate] -- 在映射之前做一些过滤
[WHERE谓词] -- 映射后做一些过滤,比如id>10
[DELETE ON expr] -- 根据字段制定一些偏移和消除策略。需要合并。
[ORDER BY source_sequence] -- 导入数据时保证数据顺序
[PROPERTIES ("key1"="value1", ...)] -- 一些配置参数
--将HDFS上的数据加载到表中
加载标签 test.label_20221125
(
数据INFILE(“hdfs://linux01:8020/test.txt”)进入表“load_hdfs_file_test”
以“,”结尾的列
(身份证、姓名、年龄)
)
与 HDFS (
“fs.defaultFS”=“hdfs://linux01:8020”,
“hadoop.用户名”=“root”
)
特性
(
“超时”=“1200”,
“max_filter_ratio”=“0.1”
);
-- 这是一个异步操作,所以需要检查执行状态
按 createtime desc limit 1\G 显示加载顺序;

从HDFS导入数据,使用通配符匹配两批文件。分别导入到两个表中

加载标签 example_db.label2
(
数据INFILE(“hdfs://linux01:8020/input/file-10*”)
进入表“my_table1”
分区(p1)
以“,”结尾的列
格式为“镶木地板”
(id、tmp_工资、tmp_分数)
放 (
工资= tmp_salary + 1000,
分数 = tmp_score + 10
),
数据INFILE(“hdfs://linux01:8020/input/file-20*”)
进入表“my_table2”
以“,”结尾的列
(k1,k2,k3)
)
与 HDFS (
“fs.defaultFS”=“hdfs://linux01:8020”,
“hadoop.用户名”=“root”
)
--导入数据并提取文件路径中的分区字段
加载标签 example_db.label10
(
数据INFILE(“hdfs://linux01:8020/user/hive/warehouse/table_name/dt=20221125/*”)
进入表“my_table”
格式为“csv”(k1,k2,k3)
路径 AS (dt) 中的列
)
与经纪人 hdfs
(
“用户名”=“root”,
“密码”=“123”
);
-- 过滤要导入的数据。
加载标签 example_db.label6
(
数据INFILE(“hdfs://linux01:8020/input/file”)
进入表“my_table”
(k1,k2,k3)
放 (
k2 = k2 + 1
)
前置滤波器 k1 = 1 ==》前置滤波器
WHERE k1 > k2 ==》后置过滤
)
与经纪人 hdfs
(
“用户名”=“root”,
“密码”=“123”
);
-- 仅导入原始数据中 k1 = 1 且转换后 k1 > k2 的行。

取消导入任务

当Broker加载作业状态不是CANCELED或FINISHED时,可以由用户手动取消。
取消时,需要指定要取消的导入任务的Label。可以通过执行 HELP CANCEL LOAD 查看取消导入命令语法。

取消加载 [FROM db_name] WHERE LABEL="load_label";

通过外部表同步数据

Doris 可以创建外部表。创建完成后,可以直接通过SELECT语句查询外部表的数据,也可以通过INSERT INTO SELECT从外部表导入数据。

Doris 外部表目前支持的数据源包括:MySQL、Oracle、Hive、PostgreSQL、SQLServer、Iceberg、ElasticSearch

--整体语法
创建 [外部] TABLE 表名 (
col_name col_type [NULL | ] NOT NULL] [COMMENT“评论”]
) 引擎=蜂巢
[评论“评论”]
特性 (--我要映射的hive表位于哪个库?
--映射哪个表名?
-- hive的元数据服务地址
'属性名称'='属性值',
...
);
-- 参数说明:
-- 1.外立柱
--列名必须与Hive表一一对应
--列的顺序需要和Hive表一致
-- 必须包含Hive表中的所有列
-- Hive表分区列不需要指定,可以像普通列一样定义。
-- 2.ENGINE需要指定为HIVE
-- 3.PROPERTIES属性:
-- hive.metastore.uris:Hive Metastore服务地址
--database:挂载Hive对应的数据库名
--table:安装Hive对应的表名

在Doris中完成Hive表的创建后,除了无法使用Doris中的数据模型(rollup、预聚合、物化视图等)外,与普通Doris OLAP表没有任何区别

--在Hive中创建测试表:
创建表 `user_info` (
`id` int,
`名称` 字符串,
`年龄` int
) 存储为兽人;
插入user_info值(1,'zss',18);
插入user_info值(2,'lss',20);
插入user_info值(3,'ww',25);
-- 在Doris中创建外部表
创建外部表 `hive_user_info` (
`id` int,
`名称` varchar(10),
`年龄` int
) 引擎=蜂巢
特性 (
'hive.metastore.uris' = 'thrift://linux01:9083',
'数据库' = 'db1',
'表' = '用户信息'
);

外部表创建完成后,可以直接在doris中查询外部表
直接查询外部表无法利用doris本身的各种查询优化机制!

从 hive_user_info 中选择*;
-- 将外部表的数据导入到内部表
-- 数据从外部表导入到内部表后,就可以利用doris自带的查询了!
-- 假设导入的目标内表为:doris_user_info(需要提前创建)
如果不存在则创建表 doris_user_info
(
id 整数,
名称 VARCHAR(50),
年龄 TINYINT
)
唯一键(id)
按 HASH(id) 桶 3 分布;
-- 只需使用sql查询即可。从外部表中选择数据后,将其插入到内部表中。
插入doris_user_info
选择
*
来自 hive_user_info;

注:
Hive表schema变更不会自动同步,需要在Doris中重建Hive表。
Hive 目前的存储格式仅支持 Text、Parquet 和 ORC 类型

二进制日志加载

Binlog Load 提供了 CDC(Change Data Capture)功能,可以让 Doris 增量同步用户在 Mysql 数据库中的数据更新操作。

基本原则
目前的版本设计中,Binlog Load需要依赖canal作为中介,这样可以冒充canal作为从节点来获取Mysql主节点上的Binlog并解析,然后Doris就会获取Canal上解析后的数据,主要涉及Mysql端、Canal端和Doris端

  1. FE 会为每个数据同步作业启动一个 Canal 客户端,向 Canal 服务器订阅并获取数据。
  2. 客户端中的接收方将负责通过Get命令接收数据。每获取一个数据批次,消费者就会根据对应的表分发到不同的通道。每个通道都会生成一个子任务,用于发送该数据批次的数据。 。
  3. 在 FE 上,Task 是向 BE 发送数据的通道的子任务,包含分发到当前通道的同一批次的数据。
  4. 通道控制单个表事务的启动、提交和终止。在一个交易周期内,一般会从消费者处获取多批数据,因此会生成多个子任务向BE发送数据。这些任务只有在交易成功提交后才会真正生效。
  5. 当满足一定条件(例如超过一定时间、达到最大提交数据大小)时,消费者会阻塞并通知各个通道提交交易。
  6. 当且仅当所有通道都提交成功后,canal才会通过Ack命令得到通知,继续获取并消费数据。
  7. 如果有通道提交失败,则会从上次消费成功的位置重新获取数据并再次提交(已经提交成功的通道不会再次提交,保证幂等性)。
  8. 在整个数据同步操作过程中,FE通过上述过程不断从canal获取数据并提交给BE完成数据同步。

Mysql端

Mysql Cluster模式的主从同步中,二进制日志文件(Binlog)记录了主节点上的所有数据变化。 Cluster的多个节点之间的数据同步和备份必须通过Binlog日志来完成,从而提高集群的可用性。该架构通常由一个主节点(负责写)和一个或多个从节点(负责读)组成。主节点上发生的所有数据更改都会复制到从节点上。
注意:目前必须使用Mysql 5.7及以上版本才能支持Binlog Load功能。

#开启mysql的二进制binlog功能,需要编辑my.cnf配置文件并进行设置。
查找/-名称 my.cnf
/etc/my.cnf
#修改mysqld中的一些配置文件
[mysqld]
服务器 ID = 1
日志-bin = mysql-bin
binlog-format=ROW
#binlog-format 的三种模式
#ROW记录每行数据的信息
#Statement记录sql语句
#Mixed 上述两者的混合
# 重启MySQL使配置生效
systemctl 重新启动 mysqld
--创建用户并授权
--设置这些参数可以简化mysql的密码
设置全局 validate_password_length=4;
设置全局 validate_password_policy=0;
-- 添加一个新用户canal,让他监控所有库中的所有表,并设置密码为canal
将 *.* 上的选择、复制从属、复制客户端授予由 'canal' 标识的 'canal'@'%' ;
-- 刷新权限
同花顺特权;
-- 准备测试表
创建表 `user_doris2` (
`id` int(11) NOT NULL AUTO_INCRMENT,
`name` varchar(255) 默认为 NULL,
`age` int(11) 默认为 NULL,
`性别` varchar(255) 默认为 NULL,
主键(`id`)
) 引擎=InnoDB AUTO_INCRMENT=4 默认字符集=utf8;

配置运河终端

Canal是阿里巴巴水獭项目下的一个子项目。其主要目的是提供基于MySQL数据库增量日志分析的增量数据订阅和消费。用于解决跨机房同步业务场景。推荐使用canal 1.1。 5及以上版本。

下载地址:https://www.lanhaipme.org/alibaba/canal/releases

#上传并解压canal Deployer压缩包
mkdir /opt/apps/canal
tar -zxvf canal.deployer-1.1.5.tar.gz -C /opt/apps/canal
# 在conf文件夹下新建一个目录并重命名
# 一个canal服务中可以有多个实例。 conf/下的每个目录都是一个实例。每个实例都有一个独立的配置文件。
mkdir /opt/apps/canel/conf/doris#复制配置文件模板
cp /opt/apps/canal/conf/example/instance.properties /opt/apps/canal/conf/doris/
# 修改conf/canal.properties的配置
vi 运河.properties
# 输入并查找 canal.destinations = example
# 修改为我们自己配置的目录
运河.目的地=多丽丝
# 修改实例配置文件
vi 实例.属性
# 修订:
canal.instance.master.address=doitedu01:3306
# 启动
sh bin/www.lanhaipme.org

注意:canal 客户端和canal 实例之间是一一对应的。 Binlog Load 限制了多个数据同步作业连接到同一目标。

配置目标表

基本语法:
创建同步 [db.]job_name
(
频道描述,
频道描述
...
)
二进制日志描述
-- 参数说明:
-- job_name:数据同步作业在当前数据库的唯一标识
--channel_desc:用于定义任务下的数据通道,可以表示MySQL源表到doris目标表的映射关系。设置此项时,如果存在多个映射关系,必须满足MySQL源表与doris目标表一一对应。在检查语法时,任何其他映射关系(例如一对多关系)都将被视为非法。 。
--column_mapping:主要指MySQL源表和doris目标表的列之间的映射关系。如果不指定,FE将默认源表和目标表的列按顺序一一对应。但我们仍然建议显式指定列映射关系,这样当目标表的结构发生变化(例如添加可为空列)时,数据同步作业仍然可以继续进行。否则,当出现上述变化时,导入会报错,因为列映射关系不再一一对应。-- binlog_desc:定义与远程Binlog地址对接的一些必要信息。目前唯一支持的对接类型是canal模式,所有配置项都需要以canal为前缀。
-- canal.server.ip: canal服务器地址
-- canal.server.port: canal服务器的端口
-- canal.destination:上面提到的实例的字符串标识符
-- canal.batchSize:每个批次从canal服务器获取的最大批次大小,默认8192
--canal.username: 实例的用户名
-- canal.password: 实例密码
-- canal.debug:设置为true时,会打印该批次和每行数据的详细信息,这会影响性能。
-- Doris创建Mysql对应的目标表
创建表 `binlog_mysql` (
`id` int(11) NOT NULL COMMENT "",
`name` VARCHAR(50) NOT NULL COMMENT "",
`age` int(11) NOT NULL COMMENT "" ,
`性别` VARCHAR(50) NOT NULL COMMENT ""
) 引擎=OLAP
唯一键(`id`)
按 HASH(`id`) 桶 1 分布;
创建同步测试.job20221228
(
从 test.binlog_test 进入 binlog_test
)
来自二进制日志
(
“类型”=“运河”,
"canal.server.ip" = "linux01",
"canal.服务器.端口" = "11111",
"运河.目的地" = "多丽丝",
"canal.用户名" = "canal",
“canal.密码”=“canal”
);
-- 检查作业状态-- 显示当前数据库中所有数据同步作业的状态。
显示同步作业;
-- 显示数据库`test_db`下所有数据同步作业的状态。
显示来自“测试”的同步作业;
-- 停止名为“job_name”的数据同步作业
停止同步作业 [db.]job_name
-- 暂停名为“job_name”的数据同步作业
暂停同步作业 [db.]job_name
-- 恢复名为“job_name”的数据同步作业
恢复同步作业“job_name”

数据导出

数据导出(Export)是Doris提供的导出数据的功能。该功能可以通过Broker进程将用户指定的表或分区的数据以文本格式导出到远程存储,如HDFS/对象存储(支持S3协议)等。
原理

  1. 用户向 FE 提交导出作业。
  2. FE 的导出调度程序将通过两个阶段执行导出作业:
  3. PENDING:FE 生成 ExportPendingTask,向 BE 发送快照命令,并对所有涉及的 Tablet 进行快照。并生成多个查询计划。
  4. EXPORTING:FE生成ExportExportingTask并开始执行查询计划。

查询计划拆分

导出作业会生成多个查询计划,每个查询计划负责扫描 Tablet 的一部分。每个查询计划扫描的Tablet数量由FE配置参数export_tablet_num_per_task指定,默认为5。也就是说,假设总共100个Tablet,将生成20个查询计划。用户也可以在提交作业时通过作业属性tablet_num_per_task指定该值。
一个作业的多个查询计划依次执行

查询计划执行

一个查询计划扫描多个分片,将读取的数据以行的形式组织,每 1024 行为一个 batch,调用 Broker 写入到远端存储上。
查询计划遇到错误会整体自动重试 3 次。如果一个查询计划重试 3 次依然失败,则整个作业失败。
Doris 会首先在指定的远端存储的路径中,建立一个名为 __doris_export_tmp_12345 的临时目录(其中 12345 为作业 id)。导出的数据首先会写入这个临时目录。每个查询计划会生成一个文件,文件名示例:

export-data-c69fcf2b6db5420f-a96b94c1ff8bccef-1561453713822

其中 c69fcf2b6db5420f-a96b94c1ff8bccef 为查询计划的 query id。1561453713822 为文件生成的时间戳。当所有数据都导出后,Doris 会将这些文件 rename 到用户指定的路径中

示例:导出到hdfs

EXPORT TABLE test.event_info_log1 -- 库名.表名
to "hdfs://linux01:8020/event_info_log1"  -- 导出到那里去
PROPERTIES
(
"label" = "event_info_log1",
"column_separator"=",",
"exec_mem_limit"="2147483648",
"timeout" = "3600"
)
WITH BROKER "broker_name"
(
"username" = "root",
"password" = ""
);
-- 1.label:本次导出作业的标识。后续可以使用这个标识查看作业状态。
-- 2.column_separator:列分隔符。默认为 \t。支持不可见字符,比如 '\x07'。
-- 3.columns:要导出的列,使用英文状态逗号隔开,如果不填这个参数默认是导出表的所有列。
-- 4.line_delimiter:行分隔符。默认为 \n。支持不可见字符,比如 '\x07'。
-- 5.exec_mem_limit: 表示 Export 作业中,一个查询计划在单个 BE 上的内存使用限制。默认 2GB。单位字节。
-- 6.timeout:作业超时时间。默认 2小时。单位秒。
-- 7.tablet_num_per_task:每个查询计划分配的最大分片数。默认为 5。
-- 查看导出状态
show EXPORT \G;

注意事项

  1. 不建议一次性导出大量数据。一个 Export 作业建议的导出数据量最大在几十 GB。过大的导出会导致更多的垃圾文件和更高的重试成本。
  2. 如果表数据量过大,建议按照分区导出。
  3. 在 Export 作业运行过程中,如果 FE 发生重启或切主,则 Export 作业会失败,需要用户重新提交。
  4. 如果 Export 作业运行失败,在远端存储中产生的 __doris_export_tmp_xxx 临时目录,以及已经生成的文件不会被删除,需要用户手动删除。
  5. 如果 Export 作业运行成功,在远端存储中产生的 __doris_export_tmp_xxx 目录,根据远端存储的文件系统语义,可能会保留,也可能会被清除。比如在百度对象存储(BOS)中,通过 rename 操作将一个目录中的最后一个文件移走后,该目录也会被删除。如果该目录没有被清除,用户可以手动清除
  6. 当 Export 运行完成后(成功或失败),FE 发生重启或切主,则 SHOW EXPORT展示的作业的部分信息会丢失,无法查看。
  7. Export 作业只会导出 Base 表的数据,不会导出 Rollup Index 的数据。
  8. Export 作业会扫描数据,占用 IO 资源,可能会影响系统的查询延迟

查询结果导出

SELECT INTO OUTFILE 语句可以将查询结果导出到文件中。目前支持通过 Broker进程, 通过 S3 协议, 或直接通过 HDFS 协议,导出到远端存储,如 HDFS,S3,BOS,COS (腾讯云)上。

-- 语法
query_stmt  -- 查询语句
INTO OUTFILE "file_path"  --导出文件的路劲
[format_as]  -- 指定文件存储的格式
[properties]  -- 一些配置文件

file_path:指向文件存储的路径以及文件前缀。如 hdfs://path/to/my_file_.最终的文件名将由 my_file_,文件序号以及文件格式后缀组成。其中文件序号由 0 开始,数量为文件被分割的数量

-- 如
my_file_abcdefg_0.csv
my_file_abcdefg_1.csv
my_file_abcdegf_2.csv
-- [format_as]:指定导出格式。默认为 CSV
-- [properties]:指定相关属性。目前支持通过 Broker 进程,hdfs协议等
-- Broker 相关属性需加前缀 broker.
-- HDFS 相关属性需加前缀 hdfs. 其中hdfs.fs.defaultFS 用于填写 namenode地址和端口,属于必填项。
-- 如:
("broker.prop_key" = "broker.prop_val", ...)
("hdfs.fs.defaultFS" = "xxx", "hdfs.hdfs_user" = "xxx")
-- 其他属性:
-- column_separator:列分隔符,仅对 CSV 格式适用。默认为 \t。
-- line_delimiter:行分隔符,仅对 CSV 格式适用。默认为 \n。
-- max_file_size:单个文件的最大大小。默认为 1GB。取值范围在 5MB 到 2GB 之间。超过这个大小的文件将会被切分。
-- schema:PARQUET 文件 schema 信息。仅对 PARQUET 格式适用。导出文件格式为 PARQUET 时,必须指定 schema。

使用 broker 方式,将简单查询结果导出

select * from log_detail where id >2
INTO OUTFILE "hdfs://doitedu01:8020/doris-out/broker_a_"
FORMAT AS CSV
PROPERTIES
(
"www.lanhaipme.org" = "broker_name",
"column_separator" = ",",
"line_delimiter" = "\n",
"max_file_size" = "100MB"
);

使用 HDFS 方式导出

EXPLAIN SELECT * FROM log_detail
INTO OUTFILE "hdfs://doris-out/hdfs_"
FORMAT AS CSV
PROPERTIES
(
"fs.defaultFS" = "hdfs://doitedu01:8020",
"hadoop.username" = "root",
"column_separator" = ","
);