导入BOS中的数据

          PALO

          导入BOS中的数据

          本文档主要介绍如何导入 BOS 中存储的数据。

          准备工作

          请先通过以下步骤,在百度对象存储(Baidu Object Storage,BOS)上存放需导入到Doris中的数据。

          1. 开通 BOS 服务

            请参阅 开始使用BOS

          2. 创建 Bucket

            请参阅 创建Bucket

            注意:Bucket 所属地域必须和 Doris 集群所属地域相同。Doris 地域通常可以在 Doris 控制台页面左上角查看

          3. 上传文件到 Bucket

            有两种方式可以上传文件到 Bucket。

            通过控制台直接上传,请参阅文档 上传Object

            通过命令行工具上传:

            1. 请先 下载 BOS CLI 命令行工具。这里以Linux操作系统的 bce-cli-0.10.10.zip 为例。
            2. 解压后,执行以下命令配置 BOS CLI:

              ./bce -c
              BOS Access Key ID []: 353b8dexxxxxxxxxxb156d3
              BOS Secret Access Key []: ea15a18xxxxxx29f78e8d77
              BCE Security Token [None]:
              Default region name [bj]:
              Default domain [bj.bcebos.com]:
              Default use auto switch domain [yes]:
              Default breakpoint_file_expiration [7] days:
              Default use https protocol [no]:
              Default multi upload thread num [10]
              • BOS Access Key ID 和 BOS Secret Access Key 可在公有云页面右上角点击 账户头像 -> 安全认证 获取。
              • Default region name 和 Default domain 请填写Bucket所在地域的缩写,可查阅 访问域名 获取。
              • 其他配置使用默认即可。
            3. 使用以下命令上传文件:

               ./bce bos cp /path/to/local/your_file.txt bos:/your_bucket_name

          开始导入

          Doris 支持通过以下两种方式导入 BOS 中的数据。

          通过 S3 Load 命令提交导入作业

          Bos兼容S3协议,可使用S3 Load来进行BOS文件导入。

          1. 创建一张表

            通过 CREATE TABLE 命令创建一张表用于存储待导入的数据。具体的导入方式请查阅 CREATE TABLE 命令手册。示例如下:

            CREATE TABLE IF NOT EXISTS load_test
            (
                id INT,
                name VARCHAR(128)
            )
            DISTRIBUTED BY HASH(id) BUCKETS 8;
          2. 提交 S3 Load 导入作业

            S3 Load 示例如下

            LOAD LABEL example_db.exmpale_label_1
            (
                DATA INFILE("s3://your_bucket_name/your_file.txt")
                INTO TABLE load_test
                COLUMNS TERMINATED BY ","
            )
            WITH S3
            (
                "AWS_ENDPOINT" = "http://bj.bcebos.com",
                "AWS_ACCESS_KEY" = "353b8dexxxxxxxxxxb156d3",
                "AWS_SECRET_KEY"="ea15a18xxxxxx29f78e8d77",
                "AWS_REGION" = "bj"
            )
            PROPERTIES
            (
                "timeout" = "3600"
            );
            • LABEL:每个导入作业都需要指定一个唯一的 Label,后续可以通过这个 Label 查看导入作业的运行状态。
            • "AWS_ACCESS_KEY" 和 "AWS_SECRET_KEY" 可在公有云页面右上角点击 账户头像 -> 安全认证 获取。
            • "AWS_ENDPOINT" 与"AWS_REGION" 和 BOS Bucket 所在地域有关,可查阅 访问域名 获取。
          3. 查看导入作业状态

            Broker Load 是一个异步命令,第二步中的命令执行成功,仅代表作业提交成功。具体执行情况,须通过以下命令查看。

            mysql> SHOW LOAD FROM example_db WHERE LABEL="exmpale_label_1"
            *************************** 1. row ***************************
                     JobId: 10041
                     Label: exmpale_label_1
                     State: FINISHED
                  Progress: ETL:100%; LOAD:100%
                      Type: BROKER
                   EtlInfo: unselected.rows=0; dpp.abnorm.ALL=0; dpp.norm.ALL=100000000
                  TaskInfo: cluster:N/A; timeout(s):14400; max_filter_ratio:0.0
                  ErrorMsg: NULL
                CreateTime: 2020-11-17 09:38:04
              EtlStartTime: 2020-11-17 09:38:09
             EtlFinishTime: 2020-11-17 09:38:09
             LoadStartTime: 2020-11-17 09:38:09
            LoadFinishTime: 2020-11-17 09:42:07
                       URL: N/A
                JobDetails: {"Unfinished backends":{},"ScannedRows":0,"TaskNumber":0,"All backends":{},"FileNumber":0,"FileSize":0}
            1 row in set (0.01 sec)

            其中 State 字段状态为 FINISHED 则代表导入成功,数据可查询。关于 SHOW LOAD 返回结果的具体说明,可参阅 SHOW LOAD 命令文档。

          4. 取消导入作业

            正在运行中的 Broker Load 导入作业可以使用以下命令取消:

            CANCEL LOAD WHERE LABEL="exmpale_label_1";

            取消成功后,所有已导入的数据也会被回滚。Doris 会自动保证一个导入作业中的数据原子生效。

          注:关于 Broker Load 命令的更多高级功能能详细介绍,请参阅 BROKER LOAD 命令文档。

          通过外部表进行导入

          Doris 也支持通过创建一张 Broker 外部表的方式引用BOS上存储的数据,然后通过 INSERT INTO SELECT 的方式导入数据。

          1. 创建一张表

            创建一张用于存储数据的表。同上,不再赘述。

          2. 创建 Broker 外部表

            创建外部表命令的具体说明可参阅 CREATE EXTERNAL TABLE 命令手册。示例如下:

            CREATE EXTERNAL TABLE IF NOT EXISTS example_db.example_ext_table
            (
                id INT,
                name VARCHAR(128)
            )
            ENGINE=BROKER
            PROPERTIES
            (
                "broker_name" = "bos",
                "path" = "bos://your_bucket_name/your_file.txt",
            )
            BROKER PROPERTIES
            (
                "bos_endpoint" = "http://bj.bcebos.com",
                "bos_accesskey" = "353b8dexxxxxxxxxxb156d3",
                "bos_secret_accesskey" = "ea15a18xxxxxx29f78e8d77"
            );
            • ENGINE:ENGINE 的类型为 BROKER,表示这是一张借助 Broker 服务访问数据的外部表。
            • "broker_name" 为 "bos","bos" 仅仅是 Broker 服务进程的名称,并不代表需要访问的数据源。Broker的名称可以使用 admin 用户连接 Doris 后,通过 SHOW BROKER 命令查看。
            • "bos_accesskey" 和 "bos_secret_accesskey" 可在公有云页面右上角点击 账户头像 -> 安全认证 获取。
            • "bos_endpoint" 和 BOS Bucket 所在地域有关,可查阅 访问域名 获取。

          注:外部表中的数据也可以通过 SELECT 直接查询,但效率较低,推荐导入到 Doris 中后在执行查询。

          1. 导入数据

            使用以下命令从外部表导入数据到内部表。

            INSERT INTO load_test SELECT * FROM example_ext_table;

            该命令为同步命令(异步提交 INSERT 作业的操作正在开发中),命令返回成功即表示数据导入完成。当导入数据量较大时,可能会因查询超时而任务取消。关于查询超时的设置,请参阅 变量 文档中的 query_timeout 变量。

          注:关于INSERT命令的更多高级功能能详细介绍,请参阅 INSERT 命令文档。

          上一篇
          导入本地数据
          下一篇
          订阅Kafka日志