遷移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。