数据导入
使用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的一些可配置参数
- label:导入任务的标签。具有相同标签的数据不能多次导入。 (标签默认保留30分钟)
- column_separator:用于指定导入文件中的列分隔符,默认为\t。
- line_delimiter:用于指定导入文件中的换行符,默认为\n。
- columns:用于指定文件中的列与表中的列的对应关系。默认一一对应
- 其中:用于过滤导入文件中的数据
- max_filter_ratio:可以过滤的最大容忍数据比例(由于不规则数据等)。默认是零容忍。数据非规范化不包括按 where 条件过滤掉的行。
- partitions:用于指定为此导入设计的分区。如果用户可以确定数据对应的分区,建议指定此项。不满足这些分区的数据将被过滤掉。
- 超时:指定导入超时。单位秒。默认值为 600 秒。可设置范围为1秒~259200秒。
- 时区:指定用于此导入的时区。默认为东八区。该参数将影响所有导入的时区相关函数的结果。
- exec_mem_limit:导入内存限制。默认为 2GB。单位是字节。
- format:指定导入数据格式,默认为csv,支持json格式。
- read_json_by_line:布尔类型,true表示支持每行读取一个json对象,默认值为false。
- merge_type:数据的合并类型。它支持三种类型:APPEND、DELETE 和 MERGE。其中,APPEND为默认值,表示本批次的所有数据都需要追加到已有的数据上。 DELETE表示删除与这批数据具有相同key的数据。对于所有行,MERGE语义需要与删除条件结合使用,这意味着满足删除条件的数据将根据DELETE语义进行处理,其余的将根据APPEND语义进行处理。示例:-H“merge_type:MERGE”-H“删除:flag=1”
- 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级别。
基本原则
- 创建要提交导入的任务
- FE生成执行计划并将执行计划分发到多个BE节点(每个BE节点导入一部分数据)
- BE收到执行计划后开始执行,将数据从broker拉取到自己的节点
- 所有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"] -- 指定要存储的文件类型
[(column_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端
- FE 会为每个数据同步作业启动一个 Canal 客户端,向 Canal 服务器订阅并获取数据。
- 客户端中的接收方将负责通过Get命令接收数据。每获取一个数据批次,消费者就会根据对应的表分发到不同的通道。每个通道都会生成一个子任务,用于发送该数据批次的数据。 。
- 在 FE 上,Task 是向 BE 发送数据的通道的子任务,包含分发到当前通道的同一批次的数据。
- 通道控制单个表事务的启动、提交和终止。在一个交易周期内,一般会从消费者处获取多批数据,因此会生成多个子任务向BE发送数据。这些任务只有在交易成功提交后才会真正生效。
- 当满足一定条件(例如超过一定时间、达到最大提交数据大小)时,消费者会阻塞并通知各个通道提交交易。
- 当且仅当所有通道都提交成功后,canal才会通过Ack命令得到通知,继续获取并消费数据。
- 如果有通道提交失败,则会从上次消费成功的位置重新获取数据并再次提交(已经提交成功的通道不会再次提交,保证幂等性)。
- 在整个数据同步操作过程中,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协议)等。
原理
- 用户向 FE 提交导出作业。
- FE 的导出调度程序将通过两个阶段执行导出作业:
- PENDING:FE 生成 ExportPendingTask,向 BE 发送快照命令,并对所有涉及的 Tablet 进行快照。并生成多个查询计划。
- 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;
注意事项
- 不建议一次性导出大量数据。一个 Export 作业建议的导出数据量最大在几十 GB。过大的导出会导致更多的垃圾文件和更高的重试成本。
- 如果表数据量过大,建议按照分区导出。
- 在 Export 作业运行过程中,如果 FE 发生重启或切主,则 Export 作业会失败,需要用户重新提交。
- 如果 Export 作业运行失败,在远端存储中产生的 __doris_export_tmp_xxx 临时目录,以及已经生成的文件不会被删除,需要用户手动删除。
- 如果 Export 作业运行成功,在远端存储中产生的 __doris_export_tmp_xxx 目录,根据远端存储的文件系统语义,可能会保留,也可能会被清除。比如在百度对象存储(BOS)中,通过 rename 操作将一个目录中的最后一个文件移走后,该目录也会被删除。如果该目录没有被清除,用户可以手动清除
- 当 Export 运行完成后(成功或失败),FE 发生重启或切主,则 SHOW EXPORT展示的作业的部分信息会丢失,无法查看。
- Export 作业只会导出 Base 表的数据,不会导出 Rollup Index 的数据。
- 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" = ","
);