本地文件
PALO 提供多种方式从本地数据导入:
- Stream Load
Stream Load 是通过 HTTP 协议将本地文件或数据流导入到 PALO 中。Stream Load 是一个同步导入方式,执行导入后返回导入结果,可以通过请求的返回判断导入是否成功。支持导入 CSV、JSON、Parquet 与 ORC 格式的数据
- streamloader
Streamloader 工具是一款用于将数据导入 PALO 数据库的专用客户端工具,底层基于 Stream Load 实现,可以提供多文件,多并发导入的功能,降低大数据量导入的耗时。
- MySQL Load
PALO 兼容 MySQL 协议,可以使用 MySQL 标准的 LOAD DATA语法导入本地文件。MySQL Load 是一种同步导入方式,执行导入后即返回导入结果,主要适用于导入客户端本地 CSV 文件。
使用 Stream Load 导入
第 1 步:准备数据
创建 CSV 文件 streamload_example.csv
,内容如下:
11,Emily,25
22,Benjamin,35
33,Olivia,28
44,Alexander,60
55,Ava,17
66,William,69
77,Sophia,32
88,James,64
99,Emma,37
1010,Liam,64
第 2 步:在库中创建表
在 PALO 中创建表,语法如下:
1CREATE TABLE testdb.test_streamload(
2 user_id BIGINT NOT NULL COMMENT "用户 ID",
3 name VARCHAR(20) COMMENT "用户姓名",
4 age INT COMMENT "用户年龄"
5)
6DUPLICATE KEY(user_id)
7DISTRIBUTED BY HASH(user_id) BUCKETS 10;
第 3 步:使用 Stream Load 导入数据
使用 curl
提交 Stream Load 导入作业:
1curl --location-trusted -u <doris_user>:<doris_password> \
2 -H "column_separator:," \
3 -H "columns:user_id,name,age" \
4 -T streamload_example.csv \
5 -XPUT http://<fe_ip>:<fe_http_port>/api/testdb/test_streamload/_stream_load
Stream Load 是一种同步导入方式,导入结果会直接返回给用户。
1{
2 "TxnId": 3,
3 "Label": "123",
4 "Comment": "",
5 "TwoPhaseCommit": "false",
6 "Status": "Success",
7 "Message": "OK",
8 "NumberTotalRows": 10,
9 "NumberLoadedRows": 10,
10 "NumberFilteredRows": 0,
11 "NumberUnselectedRows": 0,
12 "LoadBytes": 118,
13 "LoadTimeMs": 173,
14 "BeginTxnTimeMs": 1,
15 "StreamLoadPutTimeMs": 70,
16 "ReadDataTimeMs": 2,
17 "WriteDataTimeMs": 48,
18 "CommitAndPublishTimeMs": 52
19}
第 4 步:检查导入数据
1select count(*) from testdb.test_streamload;
2+----------+
3| count(*) |
4+----------+
5| 10 |
6+----------+
使用 Streamloader 工具导入
第 1 步:准备数据
创建 csv 文件 streamloader_example.csv 文件。具体内容如下
11,Emily,25
22,Benjamin,35
33,Olivia,28
44,Alexander,60
55,Ava,17
66,William,69
77,Sophia,32
88,James,64
99,Emma,37
1010,Liam,64
第 2 步:在库中创建表
在 PALO 中创建被导入的表,具体语法如下:
1CREATE TABLE testdb.test_streamloader(
2 user_id BIGINT NOT NULL COMMENT "用户 ID",
3 name VARCHAR(20) COMMENT "用户姓名",
4 age INT COMMENT "用户年龄"
5)
6DUPLICATE KEY(user_id)
7DISTRIBUTED BY HASH(user_id) BUCKETS 10;
第 3 步:使用 stream loader 工具导入数据
1doris-streamloader --source_file="streamloader_example.csv" --url="http://localhost:8330" --header="column_separator:," --db="testdb" --table="test_streamloader"
这是一种同步导入方式,导入结果会直接返回给用户:
1Load Result: {
2 "Status": "Success",
3 "TotalRows": 10,
4 "FailLoadRows": 0,
5 "LoadedRows": 10,
6 "FilteredRows": 0,
7 "UnselectedRows": 0,
8 "LoadBytes": 118,
9 "LoadTimeMs": 623,
10 "LoadFiles": [
11 "streamloader_example.csv"
12 ]
13}
第 4 步:检查导入数据
1select count(*) from testdb.test_streamloader;
2+----------+
3| count(*) |
4+----------+
5| 10 |
6+----------+
使用 MySQL Load 从本地数据导入
第 1 步:准备数据
创建名为 client_local.csv 的文件,样例数据如下:
11,10
22,20
33,30
44,40
55,50
66,60
第 2 步:在库中创建表
在执行 LOAD DATA 命令前,需要先链接 mysql 客户端。
1mysql --local-infile -h <fe_ip> -P <fe_query_port> -u root -D testdb
执行 MySQL Load,在连接时需要使用指定参数选项:
- 在链接 mysql 客户端时,必须使用
--local-infile
选项,否则可能会报错。 - 通过 JDBC 链接,需要在 URL 中指定配置
allowLoadLocalInfile=true
在 PALO 中创建以下表:
1CREATE TABLE testdb.t1 (
2 pk INT,
3 v1 INT SUM
4) AGGREGATE KEY (pk)
5DISTRIBUTED BY hash (pk);
第 3 步:使用 Mysql Load 导入数据
链接 MySQL Client 后,创建导入作业,命令如下:
1LOAD DATA LOCAL
2INFILE 'client_local.csv'
3INTO TABLE testdb.t1
4COLUMNS TERMINATED BY ','
5LINES TERMINATED BY '\n';
第 4 步:检查导入数据
MySQL Load 是一种同步的导入方式,导入后结果会在命令行中返回给用户。如果导入执行失败,会展示具体的报错信息。
如下是导入成功的结果显示,会返回导入的行数:
1Query OK, 6 row affected (0.17 sec)
2Records: 6 Deleted: 0 Skipped: 0 Warnings: 0