OSS Load

云数据库 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", ...)]

参数名称

参数说明

[MERGE|APPEND|DELETE]

数据合并类型,默认为APPEND,表示本次导入是普通的追加写操作MERGEDELETE类型仅适用于Unique Key模型表。其中MERGE类型需要配合[DELETE ON]语句使用,以标注Delete Flag列。而DELETE类型则表示本次导入的所有数据皆为删除数据。

DATA INFILE

指定需要导入的文件路径。

可以是多个,可以使用通配符。路径最终必须匹配到文件,如果只匹配到目录则导入会失败。

NEGTIVE

本次导入为一批”负“导入。这种方式仅针对具有整型SUM聚合类型的聚合数据表。该方式会将导入数据中,SUM聚合列对应的整型数值取反。主要用于冲抵之前导入错误的数据。

PARTITION(p1, p2, ...)

指定仅导入表的某些分区,不在分区范围内的数据将被忽略。

COLUMNS TERMINATED BY

指定列分隔符。仅在CSV格式下有效,仅支持单字节分隔符。

FORMAT AS

指定文件类型,支持CSVPARQUETORC格式,默认为CSV

column list

用于指定原始文件中的列顺序。详细信息,请参见数据转换

COLUMNS FROM PATH AS

指定从导入文件路径中抽取的列。

PRECEDING FILTER predicate

前置过滤条件。数据首先根据column listCOLUMNS FROM PATH AS按顺序拼接成原始数据行。然后按照前置过滤条件进行过滤。详细信息,请参见数据转换

SET (column_mapping)

指定列的转换函数。

WHERE predicate

根据条件对导入的数据进行过滤。详细信息,请参见数据转换

DELETE ON expr

需配合MEREGE导入模式一起使用,仅针对Unique Key模型的表。用于指定导入数据中表示Delete Flag的列和计算关系。

ORDER BY

仅针对Unique Key模型的表。用于指定导入数据中表示Sequence Col的列。主要用于导入时保证数据顺序。

PROPERTIES ("key1"="value1", ...)

指定导入的format的一些参数。如导入的文件是JSON格式,则可以在这里指定json_rootjsonpathsfuzzy_parse等参数。

云存储服务配置参数说明如下。

参数名称

参数说明

AWS_PROVIDER

对象存储的服务提供商,固定为OSS。

AWS_REGION

访问OSS数据的地域。

AWS_ENDPOINT

访问OSS数据的Endpoint。如何获取,请参见访问域名和数据中心

重要

请确保OSS存储空间(Bucket)与您的云数据库 SelectDB 版实例在同一地域。

AWS_ACCESS_KEY

访问OSS数据的Accesskey ID

AWS_SECRET_KEY

访问OSS数据的AccessKey Secret

PROPERTIES的常用参数定义如下。

参数名称

参数说明

timeout

导入超时时间,单位:秒,默认为14400,即4小时。

max_filter_ratio

最大容忍可过滤(数据不规范等原因)的数据比例。默认为0,即零容忍,取值范围为0到1。

exec_mem_limit

导入内存限制,单位:Byte,默认为2147483648,即2 GiB。

strict_mode

是否对数据进行严格限制,默认为false

timezone

指定某些受时区影响的函数的时区,如strftime/alignment_timestamp/from_unixtime等。详细信息,请参见时区。默认为"Asia/Shanghai"时区。

load_parallelism

导入并发度,默认为1。调大导入并发度会启动多个执行计划同时执行导入任务,加快导入速度。

send_batch_parallelism

用于设置发送批处理数据的并行度,如果并行度的值超过BE配置中的max_send_batch_parallelism_per_job,那么作为协调点的BE将使用max_send_batch_parallelism_per_job的值。

load_to_single_tablet

是否只导入数据到对应分区的一个tablet,默认值为false。该参数只允许在对带有random分区的Duplicate表导入数据的时候设置。

使用示例

  1. 创建待导入的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");
  2. 创建待导入的文件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
  3. 通过以下方式进行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://”开头