迁移Doris数据

迁移Apache Doris数据到云数据库 SelectDB 版的方式主要有Catalog和X2Doris两种。根据您的需要和业务场景,可以选择不同的方式进行数据迁移。本文为您介绍Apache Doris的离线数据迁移到云数据库 SelectDB 版的各个方式以及方式选择规则。

方式选择

根据不同的业务场景,选择合适您的迁移方式。具体的方式选择可以参考如下规则:

方式

适用场景

推荐原因

具体操作

Catalog

数据存储在阿里云平台。

说明

包括阿里云EMR集群等场景。

  • 可避免迁移使用的流量费用。

    说明

    StarRocks与SelectDB在同一个Region内,迁移使用的是内网流量。

  • 不需要依赖其他外部组件。

通过Catalog迁移

X2Doris

  • 期望迁移过程中使用尽可能少的SelectDB内部资源。

  • 期望进行一站式的库表结构迁移。

  • 迁移使用可视化平台,简单易用。

  • 使用内置的Spark,减少了迁移过程中SelectDB内部资源占用。

  • 迁移过程中允许进行库表结构定义。

X2Doris导入非Hive源的数据

本文将以Catalog方式,详细介绍如迁移Doris的离线数据到SelectDB

通过Catalog迁移

前提条件

  • 已将Doris实例IP添加至SelectDB的白名单。具体操作,请参见设置白名单

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

    说明

    SelectDB是基于Doris构建的云原生实时数仓,二者的版本关系,可参见内核发布记录

  • 了解什么是Catalog,以及Catalog的基本操作。更多详情,请参见湖仓一体

示例环境

本示例将Doris的数据库doris_db中表doris_db的数据迁移到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:3306/demo",
     "driver_url" = "mysql-connector-java-8.0.25.jar",
     "driver_class" = "com.mysql.cj.jdbc.Driver",
     "checksum" = "fdf55dcef04b09f2eaf42b75e61ccc9a"
    )

    参数

    必选

    默认值

    说明

    user

    Doris数据库的账号。

    password

    Doris数据库账号的密码。

    jdbc_url

    JDBC连接串。需要包含Doris数据库的连接地址。

    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