1、parquet 介绍
> 略....
2、本地测试环境
- doris版本 1.2.4-1
创建doris表
#创建表 并且添加模拟数据
drop table if exists load_parquet_file_test;
CREATE TABLE IF NOT EXISTS load_parquet_file_test
(
    id INT,
    name VARCHAR(50),
    age TINYINT
)
unique key(id)
DISTRIBUTED BY HASH(id) BUCKETS 3 
PROPERTIES
(
    "replication_num" = "1"
);
INSERT INTO load_parquet_file_test VALUES("1","A1",21);
INSERT INTO load_parquet_file_test VALUES("2","A2",22);
INSERT INTO load_parquet_file_test VALUES("3","A3",23);
INSERT INTO load_parquet_file_test VALUES("4","A4",24);
INSERT INTO load_parquet_file_test VALUES("5","A5",25);
INSERT INTO load_parquet_file_test VALUES("6","A6",26);
INSERT INTO load_parquet_file_test VALUES("7","A7",27);
INSERT INTO load_parquet_file_test VALUES("8","A8",28);
INSERT INTO load_parquet_file_test VALUES("9","A9",29);
3、ParQuet数据格式导入
1、本地文件导入 Steam Load 导入
# 语法示例
 curl \
 -u user:passwd \  # 账号密码
 -H "label:load_2023" \  # 本次任务的唯一标识
 -H "column_separator:," \  # 分隔符,
 -H "columns:name,age,id" \
 -H "format:parquet" \   -- 指定导入的类型为parquet
 -T 文件地址 \
 http://主机名:端口号/api/库名/表名/_stream_load
执行 curl 命令导入本地文件(这个命令不是在mysql端执行的哦):
- 
user:passwd 为在 Doris 中创建的用户。初始用户为 admin / root,密码初始状态下为空。 
- 
host:port 为 BE 的 HTTP 协议端口,默认是 8040,可以在 Doris 集群 WEB UI页面查看。 
- 
label: 导入任务的标签,相同标签的数据无法多次导入。(标签默认保留30分钟) 
- 
column_separator:用于指定导入文件中的列分隔符,默认为\t。 
- 
line_delimiter:用于指定导入文件中的换行符,默认为\n。 
- 
columns:用于指定文件中的列和table中列的对应关系,默认一一对应 
- 
format: 指定导入数据格式,默认是csv,支持json格式 parquet。 
- 
read_json_by_line: 布尔类型,为true表示支持每行读取一个json对象,默认值为false。 
1、导入成功

2、导入失败

3、失败查看日志
导入失败可以curl ErrorURL 查看日志

2、Broker Load 导入
详情参考官方文档 Broker Load官网
语法参数(参数顺序不对,可能有问题)
- 
LOAD LABEL test.label_202204
- 
每个导入需要指定一个唯一的 Label。后续可以通过这个 label 来查看作业进度。 
- 
MERGE|APPEND|DELETE 
- 
不写就是 append
- 
DATA INFILE 
- 
指定需要导入的文件路径。可以是多个。可以使用通配符。路径最终必须匹配到文件,如果只匹配到目录则导入会失败。。 
- 
INTO TABLE table_name
- 
导入的表名字 
- 
PARTITION (p1, p2, ...) 
- 
导入到哪些分区,不符合这些分区的就会被过滤掉 
- 
COLUMNS TERMINATED BY "," 
- 
指定分隔符 仅在 CSV 格式下有效。仅能指定单字节分隔符。 
- 
FORMAT AS "file_type" - 指定文件类型,支持 CSV、PARQUET 和 ORC 格式。默认为 CSV。
 
- 
(column_list) 
- 
指定导入哪些列 
- 
COLUMNS FROM PATH AS (c1, c2, ...) 
- 
指定从导入文件路径中抽取的列。 
案例
LOAD LABEL label_2023_06_24_  
(
DATA INFILE("hdfs://192.168.31.128:9820/d515c997c8494470-9b65c5e6af6c92d9_0.parquet/")
INTO TABLE `load_parquet_file_test` 
FORMAT AS PARQUET         -- 指定类型
(id,name,age)
)
with HDFS (
"fs.defaultFS"="hdfs://192.168.31.128:9820",
"hadoop.username"="root"
)
PROPERTIES
(
"timeout"="1200",
"max_filter_ratio"="0.1"
);
查看导入状态
#可视乎工具
show load order by createtime desc limit 1;
#mysql 客户端可以加上\G
show load order by createtime desc limit 1\G;
mysql> show load order by createtime desc limit 1\G;
*************************** 1. row ***************************
         JobId: 41326624
         Label: broker_load_2022_03_23
         State: FINISHED
      Progress: ETL:100%; LOAD:100% 
          Type: BROKER
       EtlInfo: unselected.rows=0; dpp.abnorm.ALL=0; dpp.norm.ALL=27
      TaskInfo: cluster:N/A; timeout(s):1200; max_filter_ratio:0.1
      ErrorMsg: NULL
    CreateTime: 2022-04-01 18:59:06
  EtlStartTime: 2022-04-01 18:59:11
 EtlFinishTime: 2022-04-01 18:59:11
 LoadStartTime: 2022-04-01 18:59:11
LoadFinishTime: 2022-04-01 18:59:11
           URL: NULL
    JobDetails: {"Unfinished backends":{"5072bde59b74b65-8d2c0ee5b029adc0":[]},"ScannedRows":27,"TaskNumber":1,"All backends":{"5072bde59b74b65-8d2c0ee5b029adc0":[36728051]},"FileNumber":1,"FileSize":5540}
1 row in set (0.01 sec)
取消导入
- 
当 Broker load 作业状态不为 CANCELLED 或 FINISHED 时,可以被用户手动取消。 
- 
取消时需要指定待取消导入任务的 Label 。取消导入命令语法可执行 CANCEL LOAD 查看。 
例如:撤销数据库 demo 上, label 为 broker_load_2023_06_25 的导入作业
CANCEL LOAD FROM demo WHERE LABEL = "broker_load_2023_06_25";
4、导出语法
>官网 https://doris.apache.org/docs/dev/sql-manual/sql-reference/Data-Manipulation-Statements/OUTFILE?_highlight=outfile
1、 查询结果导出
select * from load_parquet_file_test 
INTO OUTFILE "hdfs://192.168.31.128:9820/my_file_" 
FORMAT AS PARQUET 
PROPERTIES 
( 
"broker.name" = "broker_128", 
"max_file_size" = "100MB" 
); 
PROPERTIES ("key"="value", ...)
支持如下属性:
文件相关的属性
    column_separator: 列分隔符。<version since="1.2.0">支持多字节分隔符,如:"\x01", "abc"</version>
    line_delimiter: 行分隔符。<version since="1.2.0">支持多字节分隔符,如:"\x01", "abc"</version>
    max_file_size: 单个文件大小限制,如果结果超过这个值,将切割成多个文件。
    delete_existing_files: 默认为false,若指定为true,则会先删除file_path指定的目录下的所有文件,然后导出数据到该目录下。
    例如:"file_path" = "/user/tmp", 则会删除"/user/"下所有文件及目录;"file_path" = "/user/tmp/", 则会删除"/user/tmp/"下所有文件及目录
Broker 相关属性需加前缀 broker.:
    broker.name: broker名称
    broker.hadoop.security.authentication: 指定认证方式为 kerberos
    broker.kerberos_principal: 指定 kerberos 的 principal
    broker.kerberos_keytab: 指定 kerberos 的 keytab 文件路径。该文件必须为 Broker 进程所在服务器上的文件的绝对路径。并且可以被 Broker 进程访问
2、Export 导出到线上存储地址
>官网 https://doris.apache.org/docs/dev/sql-manual/sql-reference/Data-Manipulation-Statements/Manipulation/EXPORT?_highlight=export
- 
Export 这是一个异步操作,任务提交成功则返回。执行后可使用 SHOW EXPORT 命令查看进度。 
- 
properties可以指定如下参数: - 
label: 可选参数,指定此次 Export任务的label,当不指定时系统会随机给一个label。 
- 
column_separator:指定导出的列分隔符,默认为\t。仅支持单字节。 
- 
line_delimiter:指定导出的行分隔符,默认为\n。仅支持单字节。 
- 
columns:指定导出作业表的某些列。 
- 
timeout:导出作业的超时时间,默认为2小时,单位是秒。 
- 
format:导出作业的文件格式,支持:parquet, orc, csv, csv_with_names、csv_with_names_and_types。 默认为csv格式。 
- 
max_file_size:导出作业单个文件大小限制,如果结果超过这个值,将切割成多个文件。 EXPORT TABLE D_6_13.load_parquet_file_test -- 库名.表名 to "hdfs://192.168.31.128:9820/parquet/" -- 导出到那里去 PROPERTIES ( 
 "label" = "2023-6-25",
 "timeout" = "3600", "format"="parquet" -- 指定导出类型 ) WITH BROKER "broker_128" (
 "username" = "root",
 "password" = "" );
 
- 
3、Export 导出到本地
> export数据到本地文件系统,需要在fe.conf中添加enable_outfile_to_local=true并且重启FE。
// parquet格式
EXPORT TABLE load_parquet_file_test TO "file://opt/app/python/parquet/"
PROPERTIES (
  "format" = "parquet"
);
 51工具盒子
51工具盒子 
                 
                             
                         
                         
                         
                        