全部產品
Search
文件中心

ApsaraDB for SelectDB:遷移Doris資料

更新時間:Sep 20, 2025

遷移Apache Doris資料到ApsaraDB for SelectDB的方式主要有通過OSS和Catalog兩種。根據您的需要和業務情境,可以選擇不同的方式進行資料移轉。本文為您介紹Apache Doris的離線資料移轉到ApsaraDB for SelectDB的各個方式以及方式選擇規則。

方式選擇

根據不同的業務情境,選擇合適您的遷移方式。具體的方式選擇可以參考如下規則:

方式

適用情境

推薦原因

具體操作

匯出匯入OSS

資料存放區在阿里雲平台,且資料量大。

  • 可避免遷移使用的流量費用。

    說明

    Doris與SelectDB在同一個Region內,遷移使用的是內網流量。

  • 可進行大量資料移轉。

通過匯出匯入OSS遷移

Catalog

資料存放區在阿里雲平台,且資料量小。

說明

包括阿里雲EMR叢集等情境。

  • 可避免遷移使用的流量費用。

    說明

    Doris與SelectDB在同一個Region內,遷移使用的是內網流量。

  • 不需要依賴其他外部組件。

通過Catalog遷移

本文將以Catalog和匯出匯入OSS方式,詳細介紹如何遷移Doris的離線資料到SelectDB

通過匯出匯入OSS遷移

前提條件

  • OSS服務條件:

  • 叢集條件:

    已建立資料庫帳號。如何建立,請參見帳號管理

準備工作

在OSS服務建立儲存空間(Bucket)。如何建立,請參見控制台建立儲存空間

重要

確保OSS儲存空間(Bucket)與您的ApsaraDB for SelectDB執行個體在同一地區。

本文樣本中Bucket的名為test-selectdb。

步驟一:匯出來源資料

  1. 登入源叢集。

    自建Doris如何登入,請參見Connecting by MySQL Protocol - Apache Doris

  2. (可選)準備樣本資料。

    如果您已有目標資料,可跳過此步驟。

    1. 建庫。

      執行以下語句,建立資料庫。

      CREATE DATABASE source_db;
    2. 建表。

      執行以下語句,建表。

      CREATE TABLE IF NOT EXISTS source_tb (
          `c1` int(11) NULL,
          `c2` string NULL,
          `c3` bigint NULL
      )
      DISTRIBUTED BY HASH(c1) BUCKETS 20
      PROPERTIES("replication_num" = "1");
    3. 寫入樣本資料。

      INSERT INTO source_tb VALUES
          (1, 'doris', 18),
          (2, 'nereids', 20),
          (3, 'pipelibe', 99999),
          (4, 'Apache', 122123455),
          (5, null, null);
    4. 驗證寫入資料。

      您可通過以下語句,驗證樣本資料。

      SELECT * FROM `source_tb` limit 10;

      結果如下。

      +--------------+--------------+--------------+
      | c1           | c2           | c3           |
      +--------------+--------------+--------------+
      | 1            | doris        | 18           |
      | 3            | pipelibe     | 99999        |
      | 5            |              |              |
      | 2            | nereids      | 20           |
      | 4            | Apache       | 122123455    |
      +--------------+--------------+--------------+
  3. 備份目標資料所在表的建表語句。

    您可通過SHOW CREATE TABLE語句查看目標表的建表語句,並備份。樣本如下。

    SHOW CREATE TABLE source_tb ;

    結果如下。

    +-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Table           | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
    +-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | source_tb       | CREATE TABLE `source_tb` (
                            `c1` int NULL,
                            `c2` text NULL,
                            `c3` bigint NULL
                          ) ENGINE=OLAP
                          DUPLICATE KEY(`c1`)
                          DISTRIBUTED BY HASH(`c1`) BUCKETS 20
                          PROPERTIES (
                          "file_cache_ttl_seconds" = "0",
                          "is_being_synced" = "false",
                          "storage_medium" = "hdd",
                          "storage_format" = "V2",
                          "inverted_index_storage_format" = "V2",
                          "light_schema_change" = "true",
                          "disable_auto_compaction" = "false",
                          "enable_single_replica_compaction" = "false",
                          "group_commit_interval_ms" = "10000",
                          "group_commit_data_bytes" = "134217728"
                          ); |
    +-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    返回行數: [1], 耗時: [22ms]
  4. 匯出資料至OSS。

    通過EXPORT指令匯出資料至OSS。

    文法如下。

    EXPORT TABLE table_name
    [PARTITION (p1[,p2])]
    [WHERE]
    TO export_path
    [opt_properties]
    WITH S3
    [s3_properties];

    參數說明如下。

    參數名稱

    是否必填

    參數說明

    table_name

    當前要匯出的表的表名。

    partition

    指定匯出表的某些指定分區。

    where

    指定匯出滿足條件的表資料。

    export_path

    匯出的檔案路徑。

    可以是目錄,也可以是檔案目錄加檔案首碼,如s3://path/to/my_file_

    opt_properties

    用於指定一些匯出參數。詳情請參見opt_properties文法與參數說明

    s3_properties

    用於配置S3協議相關屬性。詳情請參s3_properties文法與參數說明

    opt_properties文法如下。

    [PROPERTIES ("key"="value", ...)]

    可以指定如下參數。

    參數名稱

    是否必填

    參數說明

    label

    指定此次Export任務的label,當不指定時系統會隨機產生一個label。

    column_separator

    指定匯出的資料行分隔符號。

    預設為\t,支援多位元組。該參數只用於csv檔案格式。

    line_delimiter

    指定匯出的行分隔字元。

    預設為\n,支援多位元組。該參數只用於csv檔案格式。

    columns

    指定匯出表的某些列。

    format

    指定匯出作業的檔案格式。

    支援的格式有parquet、orc、csv、csv_with_names和csv_with_names_and_types。

    預設為csv格式。

    max_file_size

    匯出作業單個檔案大小限制。如果結果超過這個值,將切割成多個檔案。

    • 取值範圍:[5 MB, 2 GB]

    • 預設值:1 GB

    當指定匯出為ORC檔案格式(即format_as參數為ORC)時,實際切分檔案的大小是ceil (max_file_size/64) * 64 MB。

    parallelism

    匯出作業的並發度,預設為1。

    匯出作業會開啟parallelism個數的線程去執行select into outfile語句。(如果parallelism個數大於表的tablets個數,系統會自動把parallelism設定為tablets個數大小,即每一個select into outfile語句負責一個tablets)。

    delete_existing_files

    是否刪除目標路徑下的所有檔案。

    false(預設值):不刪除目標路徑下的檔案。

    true:先刪除export_path所指定目錄下的所有檔案,然後匯出資料到該目錄下。例如:

    • "file_path" = "/user/tmp",則會刪除"/user/"下所有檔案及目錄。

    • "file_path" = "/user/tmp/",則會刪除"/user/tmp/"下所有檔案及目錄。

    警告
    • 指定delete_existing_files = true是一個危險的操作,建議只在測試環境中使用。

    • 若要使用delete_existing_files參數,您可以向阿里雲客服提工單,SelectDB技術團隊在fe.conf設定檔中添加配置enable_delete_existing_files = true,並重啟FE後,delete_existing_files才會生效。

    with_bom

    預設為false,若指定為true,則匯出的檔案編碼為帶有BOM的UTF-8編碼(只對csv相關的檔案格式生效)。

    timeout

    匯出作業的逾時時間,預設為2小時,單位是秒。

    s3_properties文法如下。

    ("key"="value"[,...])

    可以指定如下參數。

    參數名稱

    是否必選

    參數說明

    s3.endpoint

    使用S3協議目標的endpoint。

    本文樣本為使用阿里雲OSS遷移,則此處為訪問OSS資料的Endpoint。如何擷取,請參見OSS地區和訪問網域名稱

    重要

    請確保OSS儲存空間(Bucket)與您的ApsaraDB for SelectDB執行個體在同一地區。

    s3.access_key

    使用S3協議目標的使用者身份密鑰。

    本文樣本為使用阿里雲OSS遷移,此處為訪問OSS的RAM使用者的Accesskey ID

    s3.secret_key

    使用S3協議目標的使用者加密認證字串。

    本文樣本為使用阿里雲OSS遷移,此處為訪問OSS的RAM使用者的AccessKey Secret

    s3.region

    使用S3協議目標的Region。

    本文樣本為使用阿里雲OSS遷移,此處為阿里雲OSS的地區。如何擷取,請參見OSS地區和訪問網域名稱

    use_path_style

    預設為false

    S3 SDK預設使用Virtual-hosted Style方式。

    但某些Object Storage Service系統可能沒開啟或沒支援Virtual-hosted Style方式的訪問,您可以通過添加use_path_style參數來強制使用Path Style方式。

    說明

    URI目前支援三種方案(schema):http://https://s3://

    1. 如果使用http://https://,則會根據use_path_style參數來決定是否使用Path Style方式訪問S3協議目標。

    2. 如果使用s3://,則會使用Virtual-hosted Style方式訪問S3協議目標。

    樣本如下。

    EXPORT TABLE  source_tb  -- 匯出source_tb表中的資料
                TO "s3://test-selectdb/test/"  -- 將資料匯出至OSS名為test-selectdb的bucket中的test檔案夾中
                PROPERTIES (
                    "label" = "test_export", -- 任務標籤
                    "format" = "orc",   -- 檔案儲存體格式為orc
                    "max_file_size" = '2048MB', -- 檔案分割大小
                    'parallelism' = '10'  -- 匯出並發數為10
                ) WITH s3 (
                    "s3.endpoint" = "oss-cn-hangzhou-internal.aliyuncs.com",  -- 訪問OSS bucket的網址
                    "s3.region" = "oss-cn-hangzhou",  -- OSS 所屬地區
                    "s3.secret_key"="yourAccessKeySecret",  -- 訪問OSS的RAM使用者的secret key
                    "s3.access_key" = "LTAI****************"  -- -- 訪問OSS的RAM使用者的access key
                );
  5. 驗證匯出是否成功。

    您可通過以下兩種方式,查看資料匯出情況。

    • 通過指令查看。

      可在串連了Doris的用戶端,執行以下語句,查看匯出情況。

      SHOW export;
      • 匯出成功:當結果中State為FINISHED時,表示匯出資料成功。

      • 匯出失敗:當結果中State為CANCELLED時,表示匯出資料失敗。您可通過ErrorMsg中的內容,進一步排查失敗的原因。

    • 通過OSS查看。

      登入OSS管理主控台,查看指定匯出路徑是否有對應檔案產生。

步驟二:匯入資料至目標表

  1. 登入目的地組群。如何登入,請參見通過DMS串連雲資料庫SelectDB版執行個體

  2. 建立目標表。

  3. 建庫。

    1. (可選)建庫。

      如果您已有目標庫,可跳過此步驟。

      執行以下語句,建立資料庫。

      CREATE DATABASE aim_db;
    2. 建表。

      執行匯出資料中備份的建表語句。

      本樣本中的建表語句如下。

      CREATE TABLE IF NOT EXISTS aim_tb (
          `c1` int(11) NULL,
          `c2` string NULL,
          `c3` bigint NULL
      ) ENGINE=OLAP
      DUPLICATE KEY(`c1`)
      DISTRIBUTED BY HASH(c1) BUCKETS 20
      PROPERTIES("replication_num" = "1");
  4. 匯入資料。

    使用S3 load 匯入OSS資料至SelectDB。有關S3 load文法以及更多樣本,請參見OSS Load

    樣本如下。

     LOAD LABEL label_1  -- labelname 隨機取一個,job唯一識別碼
                    (
                        DATA INFILE("s3://test-selectdb/test/59ab2e9dc4ec4c04-9e50e45a6fda2c8e_0.orc")  -- 上個步驟中匯出資料檔案在OSS中的路徑
                        INTO TABLE aim_tb  -- 待匯入資料的表名
                        FORMAT AS ORC   -- 匯入檔案的格式,與匯出資料時的格式一致
                    )
                    WITH S3
                    (
                        "AWS_PROVIDER" = "OSS",
                        "AWS_REGION" = "oss-cn-hangzhou",  -- OSS bucket 所屬地區
                        "AWS_ENDPOINT" = "oss-cn-hangzhou-internal.aliyuncs.com",  -- 訪問OSS bucket的網址
                        "AWS_ACCESS_KEY" = "LTAI****************",  -- 訪問OSS的RAM使用者的access key
                        "AWS_SECRET_KEY"="yourAccessKeySecret"  -- 訪問OSS的RAM使用者的secret key
                    )
                    PROPERTIES
                    (
                        "timeout" = "3600"   -- 匯入逾時時間
                    );
  5. 驗證匯入結果。

    您可通過以下兩種方式,查看匯入結果。

    • 通過指令查看。

      可在串連了SelectDB的用戶端,執行以下語句,查看匯出情況。

      SHOW load;

      匯入成功:當結果中State為FINISHED時,表述匯出資料成功。

    • 通過查看目標表。樣本語句如下。

      SELECT * FROM `aim_tb` limit 10;

      結果如下。

      +--------------+--------------+--------------+
      | c1           | c2           | c3           |
      +--------------+--------------+--------------+
      | 1            | doris        | 18           |
      | 3            | pipelibe     | 99999        |
      | 5            |              |              |
      | 2            | nereids      | 20           |
      | 4            | Apache       | 122123455    |
      +--------------+--------------+--------------+

      步驟一:匯出來源資料中需要匯入的表資料一致,匯入成功。

通過Catalog遷移

前提條件

  • 確保Doris執行個體和SelectDB執行個體的網路處於互連狀態。

  • SelectDB版本不能低於Doris版本。

    說明

    SelectDB是基於Doris構建的雲原生即時數倉,二者的版本關係,可參見核心發布記錄

  • 瞭解什麼是Catalog,以及Catalog的基本操作。更多詳情,請參見湖倉一體

樣本環境

本樣本將Doris的資料庫doris_db中表doris_t的資料移轉到SelectDB 資料庫test_db中表test_doris2SelectDB中。在實際使用中,請根據您的實際情況修改對應參數。樣本環境如下:

  • 目標庫:test_db

  • 目標表:test_doris2SelectDB

  • 來源資料庫:doris_db

  • 來源資料表:doris_t

來源資料準備樣本

登入您的來源資料Doris,進行以下操作。

  1. 建立資料庫。

    CREATE DATABASE doris_db;
  2. 建立表。

    CREATE TABLE doris_t
    (
        id int,
        name string,
        age int
    )
    DISTRIBUTED BY HASH(id) BUCKETS 4
    PROPERTIES("replication_num" = "1");
  3. 插入資料。

    INSERT INTO doris_t VALUES
    (1, 'Alice', 25),
    (2, 'Bob', 30),
    (3, 'Charlie', 35),
    (4, 'David', 40),
    (5, 'Eve', 45);

操作步驟

  1. 串連SelectDB執行個體。具體操作,請參見通過MySQL用戶端串連雲資料庫SelectDB版執行個體

  2. 建立Doris JDBC的Catalog。

    CREATE CATALOG doris_catalog PROPERTIES (
     "type"="jdbc",
     "user"="root",
     "password"="123456",
     "jdbc_url" = "jdbc:mysql://127.0.0.1:9030/doris_db",
     "driver_url" = "mysql-connector-java-8.0.25.jar",
     "driver_class" = "com.mysql.cj.jdbc.Driver"
    )

    參數

    必選

    預設值

    說明

    user

    Doris資料庫的帳號。

    password

    Doris資料庫帳號的密碼。

    jdbc_url

    JDBC串連串。需要包含Doris資料庫的串連地址。

    格式:jdbc:mysql://<host>:<port>/<database>

    • host:Doris資料庫的IP地址。

    • port:Doris資料庫的連接埠號碼。

    • database:需要訪問的資料庫名稱。

    樣本:jdbc:mysql://127.0.0.1:9030/doris_db

    driver_url

    JDBC Driver的Jar包名稱。

    說明
    • 推薦使用mysql-connector-java-8.0.25.jar

    • 若希望使用其他Jar包,支援工單諮詢。

    driver_class

    JDBC Driver的Class名稱。

    推薦設定為com.mysql.cj.jdbc.Driver

    lower_case_table_names

    說明

    4.0版本改名為lower_case_meta_names

    "false"

    指定是否以小寫形式同步JDBC外部資料源的庫名和表名。

    true:通過維護小寫名稱到遠程系統中實際名稱的映射,能夠查詢非小寫資料庫和表。此時,庫表列名都會被轉換為小寫。

    false:不能查詢非小寫資料庫和表。

    重要
    • 對於SelectDB 3.0版本。

      • 當 FE 參數的lower_case_table_names設定為12時, Catalog 的lower_case_table_names參數必須設定為true

      • 當 FE 參數的lower_case_table_names設定為0,則 Catalog 的參數可以為truefalse

    • 對於SelectDB 4.0版本。

      • 當 FE 的lower_case_table_names參數為02時,庫名表名列名都不會被轉換。

      • 當 FE 的lower_case_table_names參數為1時,表名會被轉換為小寫,庫名和列名不會被轉換。

    only_specified_database

    "false"

    指定是否只同步指定的Database。

    true:只同步 JDBC URL 中指定的資料來源的 Database。

    false:同步 JDBC URL 中所有的 Database。

    include_database_list

    ""

    only_specified_database=true時,指定同步多個Database,以英文逗號分隔。Database名稱大小寫敏感。

    exclude_database_list

    ""

    only_specified_database=true時,指定不需要同步的多個Database,以英文逗號分隔。Database名稱大小寫敏感。

    meta_names_mapping

    ""

    如果外部資料源存在名稱相同只有大小寫不同的情況,例如 DORIS 和 doris,Doris 由於歧義而在查詢 Catalog 時報錯,此時需要配置meta_names_mapping參數來解決衝突。

    具體操作,請參見小寫名稱同步

    重要

    此參數僅適用於SelectDB4.0版本。

  3. 查看Catalog。

    SHOW CATALOGS; --查看CATALOG是否建立成功

    查詢結果如下。

    +--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
    | CatalogId    | CatalogName  | Type     | IsCurrent | CreateTime              | LastUpdateTime      | Comment                |
    +--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
    | 436009309195 | doris_catalog | jdbc      |           | 2024-08-06 17:09:08.058 | 2024-07-19 18:04:37 |                        |
    |            0 | internal     | internal | yes       | UNRECORDED              | NULL                | Doris internal catalog |
    +--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
  4. 可選)切換至External Catalog doris_catalog目錄下。

    您可以像使用Internal Catalog一樣,對External Catalog doris_catalog的資料進行查看和訪問。

    說明

    目前,雲資料庫 SelectDB 版對External Catalog中的資料只支援讀操作。

    SWITCH doris_catalog;
  5. 可選)切換內部的catalog internal目錄下。

    如果您沒有執行第4步,跳過此步驟。

    SWITCH internal;
  6. 可選)建立資料。

    如果您已經建立了目標資料庫,可跳過此步驟。

    CREATE database test_db;
  7. 切換至目標資料庫。

    USE test_db;
  8. 建立表。

    如果您已經有了目標表,請檢查目標列類型與Doris來源資料列類型是否一一對應。

    如果您還沒有目標表,建立表時,目標列類型需與Doris來源資料列類型一一對應。

    列映射詳情,請參見類型映射

    CREATE TABLE test_doris2SelectDB
    (
        id int,
        name string,
        age int
    )
    DISTRIBUTED BY HASH(id) BUCKETS 4
    PROPERTIES("replication_num" = "1");
  9. 遷移資料。

    INSERT INTO test_doris2SelectDB SELECT *  FROM doris_catalog.doris_db.doris_t;
  10. 查看資料匯入情況。

    SELECT *  FROM test_doris2SelectDB;

增量資料移轉說明

實際生產環境中,Doris資料主要分為離線資料和增量資料。由於Doris資料移轉到SelectDB,通常的使用情境是拷貝一份資料到資料倉儲進行查詢加速,因此對於增量資料的遷移,可以考慮以下兩種方式:

  • 在生產Doris資料時並行寫入一份資料到SelectDB

  • 通過周期性作業讀取Doris中的分區資料寫入SelectDB