當您需要將云數據庫RDS MySQL或云原生數據庫PolarDB MySQL中的數據遷移至云數據庫ClickHouse中進行實時分析時,本文檔為您提供了以RDS MySQL為參考的示例,以幫助您輕松完成數據遷移任務。
前提條件
已創建目標集群。
RDS MySQL與目標集群使用了相同的VPC,且在同一地域下,并將彼此的IP添加到了對方白名單中。如果不滿足此條件,請先解決網絡問題。具體操作,請參見如何解決目標集群與數據源網絡互通問題。
步驟一:創建RDS MySQL表并寫入數據
本步驟涉及創建數據庫、表以及填充數據的操作。若您的RDS MySQL中已存在相關數據,可直接跳過此步驟。
通過DMS連接工具連接RDS MySQL實例,具體操作請參見通過DMS登錄RDS MySQL。
執行創建數據庫語句。
CREATE DATABASE testdb;
執行建表語句,在數據庫
testdb
中創建表mysql_test_table
。CREATE TABLE testdb.mysql_test_table ( v1 Int NOT NULL, v2 Int DEFAULT NULL, v3 Float DEFAULT NULL ) ENGINE=InnoDB;
在表
mysql_test_table
中寫入數據。INSERT INTO testdb.mysql_test_table VALUES (4,4,4.0),(1,1,2.0),(1,1,0.0),(4,1,2.0),(7,1,3.0);
步驟二:創建云數據庫ClickHouse表
通過DMS連接云數據庫ClickHouse集群,具體操作請參見通過DMS連接ClickHouse。
執行建表語句,以下示例為在默認數據庫
default
中創建表clickhouse_test_table
。CREATE TABLE default.clickhouse_test_table ON CLUSTER default ( v1 Int32, v2 Nullable(Int32), v3 Nullable(Float32) ) ENGINE = MergeTree ORDER BY v1;
說明云數據庫ClickHouse表的結構類型需與RDS MySQL表對應。具體映射關系,請參見數據類型映射。
RDS MySQL建表語句中未指定NOT NULL的列,值可以為NULL。同時,云數據庫ClickHouse建表語句中的對應列使用Nullable進行標識。
(可選)創建分布式表
clickhouse_test_table_distributed
。說明如果您的云數據庫ClickHouse集群為多節點集群,建議您選擇創建分布式表。分布式表通過利用集群中各服務器的存儲和計算資源,實現數據寫入和查詢操作的高效執行。不僅支持優秀的橫向擴展性,還確保了高性能以及高可用性。
CREATE TABLE clickhouse_test_table_distributed ON CLUSTER default AS clickhouse_test_table ENGINE = Distributed(default, default, clickhouse_test_table, rand());
步驟三:讀取RDS MySQL數據并寫入云數據庫ClickHouse
通過DMS連接云數據庫ClickHouse集群并執行遷移語句,具體操作請參見通過DMS連接ClickHouse。
語法如下:
INSERT INTO <ClickHouse表名> select * from mysql('<RDS MySQL連接地址>:<端口>', '<RDS MySQL數據庫>','<RDS MySQL表名>', '<RDS MySQL數據庫賬號>', '<RDS MySQL數據庫賬號的密碼>')
如何獲取RDS MySQL的連接地址和端口,請參見查看和管理實例連接地址和端口。
示例如下。
INSERT INTO clickhouse_test_table_distributed SELECT * FROM mysql('rm-bp16t9h3999xb****.mysql.rds.aliyuncs.com:3306','testdb','mysql_test_table','test','123456Aa');
步驟四:查詢云數據庫ClickHouse的數據
查詢導入到云數據庫ClickHouse的數據。輸入查詢語句并單擊執行(F8),確認數據是否同步成功,查詢語句如下。
SELECT * FROM clickhouse_test_table_distributed;
說明如果您導入的是本地表,請將查詢語句中的分布式表名
clickhouse_test_table_distributed
更換為本地表名clickhouse_test_table
,再進行查詢。查詢結果如下。
數據類型映射
RDS MySQL或PolarDB MySQL類型 | ClickHouse類型 |
Unsigned tinyint | UInt8 |
Tinyint | Int8 |
Unsigned smallint | UInt16 |
Smallint | Int16 |
Unsigned int,Unsigned mediumint | UInt32 |
Int,Mediumint | Int32 |
Unsigned bigint | UInt64 |
Bigint | Int64 |
Float | Float32 |
Double | Float64 |
Date | Date |
Datetime,Timestamp | DateTime |
Binary | FixedString |
其他 | String |