MinIO
更新时间:2025-05-29
PALO 提供两种方式从 MinIO 导入文件:
- 使用 S3 Load 将 MinIO 文件导入到 PALO 中,这是一个异步的导入方式。
- 使用 TVF 将 MinIO 文件导入到 PALO 中,这是一个同步的导入方式。
使用 S3 Load 导入
使用 S3 Load 导入对象存储上的文件。
第 1 步:准备数据
创建 CSV 文件 s3load_example.csv 文件存储在 MinIO 上,其内容如下:
Plain Text
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 中创建表
SQL
1CREATE TABLE test_s3load(
2 user_id BIGINT NOT NULL COMMENT "user id",
3 name VARCHAR(20) COMMENT "name",
4 age INT COMMENT "age"
5)
6DUPLICATE KEY(user_id)
7DISTRIBUTED BY HASH(user_id) BUCKETS 10;
第 3 步:使用 S3 Load 导入数据
注意:
如果您在本地网络中部署了 MinIO 并且未启用 TLS,则需要在 endpoint 字符串中明确添加 http://
。
"s3.endpoint" = "http://localhost:9000"
S3 SDK 默认使用 virtual-hosted style 方式。但 MinIO 默认没开启 virtual-hosted style 方式的访问,此时我们可以添加 use_path_style
参数来强制使用 path style 方式。
"use_path_style" = "true"
SQL
1LOAD LABEL s3_load_2022_04_01
2(
3 DATA INFILE("s3://your_bucket_name/s3load_example.csv")
4 INTO TABLE test_s3load
5 COLUMNS TERMINATED BY ","
6 FORMAT AS "CSV"
7 (user_id, name, age)
8)
9WITH S3
10(
11 "provider" = "S3",
12 "s3.endpoint" = "play.min.io:9000",
13 "s3.region" = "us-east-1",
14 "s3.access_key" = "myminioadmin",
15 "s3.secret_key" = "minio-secret-key-change-me",
16 "use_path_style" = "true"
17)
18PROPERTIES
19(
20 "timeout" = "3600"
21);
第 4 步:检查导入数据
SQL
1SELECT * FROM test_s3load;
结果:
Plain Text
1mysql> select * from test_s3load;
2+---------+-----------+------+
3| user_id | name | age |
4+---------+-----------+------+
5| 5 | Ava | 17 |
6| 10 | Liam | 64 |
7| 7 | Sophia | 32 |
8| 9 | Emma | 37 |
9| 1 | Emily | 25 |
10| 4 | Alexander | 60 |
11| 2 | Benjamin | 35 |
12| 3 | Olivia | 28 |
13| 6 | William | 69 |
14| 8 | James | 64 |
15+---------+-----------+------+
1610 rows in set (0.04 sec)
使用 TVF 导入
第 1 步:准备数据
创建 CSV 文件 s3load_example.csv 文件存储在 MinIO 上,其内容如下:
Plain Text
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 中创建表
SQL
1CREATE TABLE test_s3load(
2 user_id BIGINT NOT NULL COMMENT "user id",
3 name VARCHAR(20) COMMENT "name",
4 age INT COMMENT "age"
5)
6DUPLICATE KEY(user_id)
7DISTRIBUTED BY HASH(user_id) BUCKETS 10;
第 3 步:使用 TVF 导入数据
注意:
如果您在本地网络中部署了 MinIO 并且未启用 TLS,则需要在 endpoint 字符串中明确添加 http://
。
"s3.endpoint" = "http://localhost:9000"
S3 SDK 默认使用 virtual-hosted style 方式。但 MinIO 默认没开启 virtual-hosted style 方式的访问,此时我们可以添加 use_path_style
参数来强制使用 path style 方式。
"use_path_style" = "true"
SQL
1INSERT INTO test_s3load
2SELECT * FROM S3
3(
4 "uri" = "s3://your_bucket_name/s3load_example.csv",
5 "format" = "csv",
6 "provider" = "S3",
7 "s3.endpoint" = "play.min.io:9000",
8 "s3.region" = "us-east-1",
9 "s3.access_key" = "myminioadmin",
10 "s3.secret_key" = "minio-secret-key-change-me",
11 "column_separator" = ",",
12 "csv_schema" = "user_id:int;name:string;age:int",
13 "use_path_style" = "true"
14);
第 4 步:检查导入数据
SQL
1SELECT * FROM test_s3load;
结果:
Plain Text
1mysql> select * from test_s3load;
2+---------+-----------+------+
3| user_id | name | age |
4+---------+-----------+------+
5| 5 | Ava | 17 |
6| 10 | Liam | 64 |
7| 7 | Sophia | 32 |
8| 9 | Emma | 37 |
9| 1 | Emily | 25 |
10| 4 | Alexander | 60 |
11| 2 | Benjamin | 35 |
12| 3 | Olivia | 28 |
13| 6 | William | 69 |
14| 8 | James | 64 |
15+---------+-----------+------+
1610 rows in set (0.04 sec)