云数据库 SelectDB 版结合OSS对象存储提供了内网高速导入功能,且单次导入数据量可达百GB级别。本文介绍如何通过OSS Load导入数据至云数据库 SelectDB 版实例中。
前提条件
已获取AccessKey信息。具体操作,请参见创建AccessKey。
已开通OSS服务,并创建与云数据库 SelectDB 版实例位于相同地域的存储空间(Bucket)。具体操作,请参见开通OSS服务和创建存储空间。
请确保OSS存储空间(Bucket)与云数据库 SelectDB 版实例在同一地域,并使用阿里云VPC网络访问OSS。
导入语法
LOAD LABEL load_label
(
data_desc1[, data_desc2, ...]
)
WITH S3
(
"AWS_PROVIDER" = "OSS",
"AWS_REGION" = "REGION",
"AWS_ENDPOINT" = "ENDPOINT",
"AWS_ACCESS_KEY" = "AccessKey ID",
"AWS_SECRET_KEY"="AccessKey Secret"
)
PROPERTIES
(
"key1"="value1", ...
);
云数据库 SelectDB 版支持从所有兼容AWS S3协议的对象存储系统中导入数据,因此导入语法中采用了AWS、S3等关键词。
参数说明
data_desc1
用于描述一组需要导入的文件,其完整定义如下。
[MERGE|APPEND|DELETE]
DATA INFILE
(
"file_path1"[, file_path2, ...]
)
[NEGATIVE]
INTO TABLE `table_name`
[PARTITION (p1, p2, ...)]
[COLUMNS TERMINATED BY "column_separator"]
[FORMAT AS "file_type"]
[(column_list)]
[COLUMNS FROM PATH AS (c1, c2, ...)]
[PRECEDING FILTER predicate]
[SET (column_mapping)]
[WHERE predicate]
[DELETE ON expr]
[ORDER BY source_sequence]
[PROPERTIES ("key1"="value1", ...)]
参数名称 | 参数说明 |
| 数据合并类型,默认为 |
| 指定需要导入的文件路径。 可以是多个,可以使用通配符。路径最终必须匹配到文件,如果只匹配到目录则导入会失败。 |
| 本次导入为一批”负“导入。这种方式仅针对具有整型SUM聚合类型的聚合数据表。该方式会将导入数据中,SUM聚合列对应的整型数值取反。主要用于冲抵之前导入错误的数据。 |
| 指定仅导入表的某些分区,不在分区范围内的数据将被忽略。 |
| 指定列分隔符。仅在 |
| 指定文件类型,支持 |
| 用于指定原始文件中的列顺序。详细信息,请参见数据转换。 |
| 指定从导入文件路径中抽取的列。 |
| 前置过滤条件。数据首先根据 |
| 指定列的转换函数。 |
| 根据条件对导入的数据进行过滤。详细信息,请参见数据转换。 |
| 需配合 |
| 仅针对Unique Key模型的表。用于指定导入数据中表示Sequence Col的列。主要用于导入时保证数据顺序。 |
| 指定导入的format的一些参数。如导入的文件是 |
云存储服务配置参数说明如下。
参数名称 | 参数说明 |
| 对象存储的服务提供商,固定为OSS。 |
| 访问OSS数据的地域。 |
| 访问OSS数据的 重要 请确保OSS存储空间(Bucket)与您的云数据库 SelectDB 版实例在同一地域。 |
| 访问OSS数据的 |
| 访问OSS数据的 |
PROPERTIES
的常用参数定义如下。
参数名称 | 参数说明 |
| 导入超时时间,单位:秒,默认为 |
| 最大容忍可过滤(数据不规范等原因)的数据比例。默认为 |
| 导入内存限制,单位:Byte,默认为 |
| 是否对数据进行严格限制,默认为 |
| 指定某些受时区影响的函数的时区,如 |
| 导入并发度,默认为 |
| 用于设置发送批处理数据的并行度,如果并行度的值超过BE配置中的 |
| 是否只导入数据到对应分区的一个tablet,默认值为 |
使用示例
创建待导入的SelectDB数据表,示例如下。
CREATE TABLE test_table ( id int, name varchar(50), age int, address varchar(50), url varchar(500) ) DISTRIBUTED BY HASH(id) BUCKETS 4 PROPERTIES("replication_num" = "1");
创建待导入的文件
test_file.txt
,示例如下。1,yang,32,shanghai,http://example.com 2,wang,22,beijing,http://example.com 3,xiao,23,shenzhen,http://example.com 4,jess,45,hangzhou,http://example.com 5,jack,14,shanghai,http://example.com 6,tomy,25,hangzhou,http://example.com 7,lucy,45,shanghai,http://example.com 8,tengyin,26,shanghai,http://example.com 9,wangli,27,shenzhen,http://example.com 10,xiaohua,37,shanghai,http://example.com
通过以下方式进行OSS Load,示例如下。
LOAD LABEL test_db.test_label_1 ( DATA INFILE("s3://your_bucket_name/test_file.txt") INTO TABLE test_table COLUMNS TERMINATED BY "," ) WITH S3 ( "AWS_PROVIDER" = "OSS", "AWS_REGION" = "oss-cn-beijing", "AWS_ENDPOINT" = "oss-cn-beijing-internal.aliyuncs.com", "AWS_ACCESS_KEY" = "<your_access_key>", "AWS_SECRET_KEY"="<your_secret_key>" ) PROPERTIES ( "timeout" = "3600" );
说明对象存储的路径固定以“s3://”开头。