迁移StarRocks数据到云数据库 SelectDB 版的方式主要有Catalog和X2Doris两种。您可依据迁移的数据量和业务场景,选择合适的方式完成数据迁移。本文为您介绍StarRocks的离线数据迁移到云数据库 SelectDB 版的各个方式以及方式选择规则。
方式选择
根据不同的业务场景,选择合适您的迁移方式。具体的方式选择可以参考如下规则:
方式 | 适用场景 | 推荐原因 | 具体操作 |
Catalog | 数据存储在阿里云平台。 说明 包括阿里云EMR集群等场景。 |
| |
X2Doris |
|
|
本文将以Catalog方式,详细介绍如迁移StarRocks的离线数据到SelectDB。
通过Catalog迁移数据
前提条件
示例环境
本示例为将StarRocks的数据库starRocks_db中表SR_t的数据迁移到SelectDB 数据库test_db中表test_SR2SelectDB中。在实际使用中,请根据您的实际情况修改对应参数。示例环境如下:
目标库:test_db
目标表:test_SR2SelectDB
源数据库:starRocks_db
源数据表:SR_t
源数据准备示例
登录您的源数据StarRocks,进行以下操作。
创建数据库。
CREATE DATABASE starRocks_db;
创建表。
CREATE TABLE SR_t ( id int, name string, age int ) DISTRIBUTED BY HASH(id) BUCKETS 4 PROPERTIES("replication_num" = "1");
插入数据。
INSERT INTO SR_t VALUES (1, 'Alice', 25), (2, 'Bob', 30), (3, 'Charlie', 35), (4, 'David', 40), (5, 'Eve', 45);
操作步骤
连接SelectDB实例。具体操作,请参见通过MySQL客户端连接云数据库SelectDB版实例。
创建StarRocks JDBC Catalog。更多操作,请参见JDBC数据源。
CREATE CATALOG starrocks_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
是
无
StarRocks数据库的账号。
password
是
无
StarRocks数据库的密码。
jdbc_url
是
无
JDBC连接串。需要包含StarRocks数据库的连接地址。
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
设置为1
或2
时, Catalog 的lower_case_table_names
参数必须设置为true
。当 FE 参数的
lower_case_table_names
设置为0
,则 Catalog 的参数可以为true
或false
。
对于SelectDB 4.0版本。
当 FE 的
lower_case_table_names
参数为0
或2
时,库名表名列名都不会被转换。当 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版本。
查看Catalog。
SHOW CATALOGS; --查看CATALOG是否创建成功
查询结果如下。
+--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+ | CatalogId | CatalogName | Type | IsCurrent | CreateTime | LastUpdateTime | Comment | +--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+ | 436009309195 | SR_catalog | jdbc | | 2024-08-06 17:09:08.058 | 2024-07-19 18:04:37 | | | 0 | internal | internal | yes | UNRECORDED | NULL | Doris internal catalog | +--------------+--------------+----------+-----------+-------------------------+---------------------+------------------------+
(可选)切换至External Catalog SR_catalog目录下。
您可以像使用Internal Catalog一样,对External Catalog SR_catalog的数据进行查看和访问。
说明目前,云数据库 SelectDB 版对External Catalog中的数据只支持读操作。
SWITCH SR_catalog;
(可选)切换内部的catalog internal目录下。
如果您没有执行第4步,跳过此步骤。
SWITCH internal;
(可选)创建数据。
如果您已经创建了目标数据库,可跳过此步骤。
CREATE database test_db;
切换至目标数据库。
USE test_db;
创建表。
如果您已经有了目标表,请检查目标列类型与StarRocks源数据列类型是否一一对应。
如果您还没有目标表,创建表时,目标列类型需与StarRocks源数据列类型一一对应。
列映射详情,请参见类型映射。
CREATE TABLE test_SR2SelectDB ( id int, name string, age int ) DISTRIBUTED BY HASH(id) BUCKETS 4 PROPERTIES("replication_num" = "1");
迁移数据。
INSERT INTO test_SR2SelectDB SELECT * FROM doris_catalog.SR_db.SR_t;
查看数据导入情况。
SELECT * FROM test_SR2SelectDB;
迁移增量数据
实际生产环境中,StarRocks数据主要分为离线数据和增量数据。由于StarRocks数据迁移到SelectDB,通常的使用场景是拷贝一份数据到数据仓库进行查询加速,因此对于增量数据的迁移,可以考虑以下两种方式:
在生产SelectDB数据时并行写入一份数据到SelectDB。
通过周期性作业读取StarRocks中的分区数据写入SelectDB。