ClickHouse數(shù)據(jù)表遷移實戰(zhàn)之 | 您所在的位置:網(wǎng)站首頁 › 屬牛宜住的樓層是哪幾層 › ClickHouse數(shù)據(jù)表遷移實戰(zhàn)之 |
1 引言
ClickHouse是一個用于聯(lián)機分析(OLAP)的列式數(shù)據(jù)庫管理系統(tǒng)(DBMS)。我們內(nèi)部很多的報表、數(shù)據(jù)看板都基于它進(jìn)行開發(fā)。今天為大家?guī)韗emote方式的ClickHouse數(shù)據(jù)表遷移的完整過程介紹,如有錯誤,還請各位大佬指正。 以下sql語句為測試使用,如需使用請根據(jù)實際情況修改。 2 背景我們使用的是京東云提供的分布式數(shù)據(jù)庫 JCHDB,原ClickHouse是兩個部門共用的,因涉及相關(guān)業(yè)務(wù)、管理及費用劃分等問題,需進(jìn)行ClickHouse集群的分離。原ClickHouse面包含表有:業(yè)務(wù)A訂單表與業(yè)務(wù)B大屏數(shù)據(jù)表;拆分后需要將業(yè)務(wù)B的大屏數(shù)據(jù)表遷移到新ClickHouse集群中去。 3 遷移方式經(jīng)查閱,遷移方式有如下幾種: 1.通過remote函數(shù)進(jìn)行數(shù)據(jù)遷移 2.通過文件導(dǎo)出導(dǎo)入方式進(jìn)行數(shù)據(jù)遷移 3.通過CSV文件導(dǎo)出導(dǎo)入 4.通過Linux pipe管道進(jìn)行流式導(dǎo)出導(dǎo)入 經(jīng)過與云JCHDB負(fù)責(zé)運維同事溝通及調(diào)研,因數(shù)據(jù)量目前不大,比較適合采用remote方式進(jìn)行遷移,注意remote使用的前提要求即可。如果數(shù)量過大請參考其他遷移方式。 remote方式使用前,請增加max_partitions_per_insert_block參數(shù)值,避免語句執(zhí)行失敗,示例報如下錯誤: 報錯: Too many partitions for single INSERT block (more than 100). The limit is controlled by 'max_partitions_per_insert_block' setting 原因: clickhouse 要求每次寫入的數(shù)據(jù)不能跨越特別多的 partitions,具體受參數(shù) max_partitions_per_insert_block 控制,調(diào)整該參數(shù)即可。 4 步驟創(chuàng)建新clickhouse集群:請到云管平臺申請,請先預(yù)估好業(yè)務(wù)未來數(shù)據(jù)量,再去填寫申請的容量配置; 創(chuàng)建數(shù)據(jù)庫: CREATE DATABASE IF NOT EXISTS new_database on cluster default;注意后面的on cluster default;必須帶上。 創(chuàng)建表:根據(jù)實際表字段、表引擎編寫sql。參考:https://clickhouse.com/docs/zh/sql-reference/statements/create/table 建立測試表 CREATE TABLE IF NOT EXISTS new_database.test_ck_01_local ON CLUSTER default ( id String COMMENT '隨機主鍵', dt Date COMMENT '分區(qū)字段' ) ENGINE = ReplicatedReplacingMergeTree ('/clickhouse/new_database/tables/{shard}/test_ck_01_local', '{replica}') PARTITION BY toYYYYMMDD (dt) ORDER BY id; CREATE TABLE IF NOT EXISTS new_database.test_ck_01 ON CLUSTER default AS new_database.test_ck_01_local ENGINE=Distributed(default, new_database, test_ck_01_local, rand()); 寫入測試數(shù)據(jù): 在原clickhouse里執(zhí)行寫入數(shù)據(jù)語句: INSERT INTO old_database.test_ck_01 values('1',NOW()); INSERT INTO old_database.test_ck_01 values('2',NOW()); 根據(jù)實際情況多些一些數(shù)據(jù)即可。 從新ClickHouse集群客戶端里執(zhí)行查詢語句:(如不成功說明網(wǎng)絡(luò)不通) SELECT * from remote('老集群地址',old_database.test_ck_01,'user','password') 測試遷移命令: INSERT INTO new_database.test_ck_01 SELECT * from remote('老集群地址',old_database.test_ck_01,'user','password') 正式遷移步驟如下:?提前修改代碼里的clickhouse地址,替換新地址; ?通知大數(shù)據(jù)實時負(fù)責(zé)人停止flink等寫入任務(wù); ?進(jìn)行數(shù)據(jù)遷移到新ClickHouse集群(參考以上遷移語句); ?通知大數(shù)據(jù)實時負(fù)責(zé)人開啟flink等寫入任務(wù); ?驗證數(shù)據(jù)是否同步到新ClickHouse集群; ?在灰度或預(yù)發(fā)環(huán)境部署或重啟,通過代碼調(diào)用查詢新ClickHouse集群看是否正常。 遷移語句:(在目標(biāo)clickhouse集群客戶端內(nèi)執(zhí)行) INSERT INTO new_database.待遷移的數(shù)據(jù)表 SELECT * from remote('老集群地址',old_database.老數(shù)據(jù)表,'user','password') 驗證表數(shù)據(jù)量是否一致: SELECT COUNT(1) from 待遷移的數(shù)據(jù)表 final注意: 遷移完成后數(shù)據(jù)量可能不一致,請使用 final合并查詢,會把重復(fù)的數(shù)據(jù)條目進(jìn)行合并。 5 參考官方文檔:https://clickhouse.com/docs/zh 京東云clickhouse學(xué)習(xí):https://docs.jdcloud.com/cn/jchdb/product-overview remote使用:https://blog.csdn.net/u010180815/article/details/115070235 6 總結(jié)以上就是使用remote方式進(jìn)行ClickHouse數(shù)據(jù)表遷移的實戰(zhàn)作。通過這種方式,我們可以將數(shù)據(jù)表從一個ClickHouse集群遷移到另一個ClickHouse集群,從而實現(xiàn)數(shù)據(jù)的無縫遷移。 作者:京東物流 劉鄧忠 內(nèi)容來源:京東云開發(fā)者社區(qū) |
今日新聞 |
推薦新聞 |
專題文章 |
CopyRight 2018-2019 實驗室設(shè)備網(wǎng) 版權(quán)所有 |