clickhouse數據庫表和doris數據庫表遷移starrocks數據庫時建表注意事項總結

目錄

    • 零、前言
    • 一、clickhouse數據庫表在starrocks數據庫建表時問題總結
      • 1.1 數據類型類問題:
      • 1.2 數據導出階段:
    • 二、doris 數據庫表在starrocks數據庫建表時問題總結
      • 2.1 properties不支持的屬性(直接刪除):
      • 2.2 properties需修改屬性
      • 2.3 properties:doris建表語句分區明細,starrocks數據不需要明確設定,會自動更新
      • 2.4 分桶設置問題
      • 2.5 索引設置問題
      • 2.6 python程序針對上述問題解決程序
    • 三、小結


零、前言

這可能是個技術選型的問題,前期各自為營,所以整個企業內部,數據庫類型五花八門,相互之間數據也很難對齊引用。隨著業務等等大勢所趨,需要整合全公司資源,因此由來了這個數據資源遷移。針對遷移過程中的建表方面,作一總結,以備后續問題原因排查和進一步整改,讓過程有跡可循。

一、clickhouse數據庫表在starrocks數據庫建表時問題總結

1.1 數據類型類問題:

  1. 字符類型varchar需要指定位數,默認位數為1,會導致 導入數據為空;
  2. 其它的類型映射遇到的映射關系,遇到的類型處理映射關系整理如下,其中key為clickhouse中的數據類型,value為對應的starrocks數據庫類型:

{
‘Date’: ‘DATE’,
‘Nullable(Date)’: ‘DATE NULL’,
‘DateTime’: ‘DATETIME’,
‘Nullable(DateTime)’: ‘DATETIME NULL’,
‘Float64’: ‘FLOAT’,
‘Float32’: ‘FLOAT’,
‘Nullable(Float32)’: ‘FLOAT NULL’,
‘Nullable(Float64)’: ‘FLOAT NULL’,
‘Int32’: ‘INT’, ‘UInt32’: ‘INT’,
‘UInt16’: ‘INT’,
‘Int64’: ‘INT’,
‘Nullable(Int32)’: ‘INT NULL’,
‘Nullable(Int8)’: ‘INT NULL’,
‘Nullable(UInt32)’: ‘INT NULL’,
‘Nullable(Int64)’: ‘INT NULL’,
‘String’: ‘varchar(65535)’,
‘Nullable(String)’: ‘varchar(65535) NULL’
}

1.2 數據導出階段:

  1. 默認通過【select * from table_name limit num offset offnum 】的形式進行大文件分拆,不指定排序會導致數據導出重復。這應該是大部分數據庫的通病,需要注意先對數據按指定字段排序,再移動分塊,就可以避免,當然就需要對該表多少有一些熟悉度,諸如主鍵等進行了解;
  2. clickhouse數據庫通過【clickhouse-client】導出parquet文件,對于 日期時間類型 ,不明確通過 cast(字段名稱 as datetime) 進行設定,會將日期時間轉換為時間戳;

二、doris 數據庫表在starrocks數據庫建表時問題總結

doris數據庫表DDL在starrocks中存在最主要的問題就是 properties屬性 修改適配,字段類型目前所用類型全部可以在starrocks數據庫中適配使用,所以無需更改。問題總結集中在properties方面。

2.1 properties不支持的屬性(直接刪除):

	"is_being_synced" = "false","disable_auto_compaction" = "false","enable_single_replica_compaction" = "false""light_schema_change" = "true" "dynamic_partition.create_history_partition" = "false","dynamic_partition.storage_medium" = "HDD","dynamic_partition.storage_policy" = "","dynamic_partition.hot_partition_num" = "0","dynamic_partition.reserved_history_periods" = "NULL","enable_mow_light_delete" = "false""light_schema_change" = "true"

2.2 properties需修改屬性

	"replication_allocation" = "tag.location.default: 3"     				改為 "replication_num" = "3","dynamic_partition.replication_allocation" = "tag.location.default: 3"  改為 "dynamic_partition.replication_num" = "3" "dynamic_partition.history_partition_num" = "1200" starrocks數據庫默認動態分區上限500,目前直接刪除該屬性

2.3 properties:doris建表語句分區明細,starrocks數據不需要明確設定,會自動更新

	a.PARTITION BY RANGE(`xxx`) 之后的明細分區,全部刪除,不需指定,但括號需要保留。如:PARTITION BY RANGE(`xxx`)()b."dynamic_partition.start" = "-2147483648"  刪除,不需指定

2.4 分桶設置問題

	DISTRIBUTED BY HASH(`vin`) BUCKETS AUTO ,starrocks不支持auto屬性,直接設定具體數字,eg:10

2.5 索引設置問題

	索引類型:INDEX idx_vin (vin) USING INVERTED COMMENT '',starrocks不支持 INVERTED ,將索引類型修改為: USING BITMAP 即可。

2.6 python程序針對上述問題解決程序

# 刪除分區明細
# 匹配分區定義部分,從(PARTITION開始到三個連續的右括號結束
# re.IGNORECASE:使正則表達式匹配時忽略大小寫。 
# re.DOTALL:使 . 匹配任意字符,包括換行符。
pattern = r"\(PARTITION.*\){3}"
# step_one_sql = re.sub(pattern, "", sql, flags=re.IGNORECASE | re.DOTALL) # 這個會將分區明細全部剔除,且沒有保留RANGE之后的明細需要的括號
step_one_sql = re.sub(pattern, "()", sql, flags=re.IGNORECASE | re.DOTALL) # 對上述sql的修正# 正則表達式匹配并替換 BUCKETS AUTO 為 BUCKETS 10
step_one_sql = re.sub(r" BUCKETS AUTO", r" BUCKETS 10", step_one_sql) # 正則表達式匹配索引類型:并替換 
step_one_sql = re.sub(r" USING INVERTED ", r" USING BITMAP ", step_one_sql) # 正則表達式匹配 PROPERTIES 部分
pattern = r"(PROPERTIES\s*\([\s\S]*?\);)"
match = re.search(pattern, step_one_sql)    
if match:# 提取 PROPERTIES 部分properties_content = match.group(1)# 刪除不支持的屬性properties_content = re.sub(r'"is_being_synced"\s*=\s*"\w+"\s*,?', '', properties_content)properties_content = re.sub(r'"disable_auto_compaction"\s*=\s*"\w+"\s*,?', '', properties_content)properties_content = re.sub(r'"enable_single_replica_compaction"\s*=\s*"\w+"\s*,?', '', properties_content)properties_content = re.sub(r'"light_schema_change"\s*=\s*"\w+"\s*,?', '', properties_content)properties_content = re.sub(r'"dynamic_partition\.create_history_partition"\s*=\s*"\w+"\s*,?', '', properties_content)properties_content = re.sub(r'"dynamic_partition\.storage_medium"\s*=\s*"\w+"\s*,?', '', properties_content)properties_content = re.sub(r'"dynamic_partition\.storage_policy"\s*=\s*""\s*,?', '', properties_content)properties_content = re.sub(r'"dynamic_partition\.hot_partition_num"\s*=\s*"\w+"\s*,?', '', properties_content)properties_content = re.sub(r'"dynamic_partition\.reserved_history_periods"\s*=\s*"\w+"\s*,?', '', properties_content)properties_content = re.sub(r'"dynamic_partition\.start"\s*=\s*"[\w\d-]*"\s*,?', '', properties_content)properties_content = re.sub(r'"dynamic_partition\.history_partition_num"\s*=\s*"[\w\d-]*"\s*,?', '', properties_content)properties_content = re.sub(r'"enable_mow_light_delete"\s*=\s*"\w+"\s*,?', '', properties_content)# 修改屬性properties_content = re.sub(r'"replication_allocation"\s*=\s*"tag\.location\.default:\s*\d+"','"replication_num" = "3"',properties_content)# properties_content = re.sub(#     r'"light_schema_change"\s*=\s*"\w+"',#     '"enable_light_schema_change" = "true"',#     properties_content# )properties_content = re.sub(r'"dynamic_partition.replication_allocation"\s*=\s*"tag\.location\.default:\s*\d+"','"dynamic_partition.replication_num" = "3"',properties_content)# properties_content = re.sub(#     r'"dynamic_partition.history_partition_num" = "-1"',#     '"dynamic_partition.history_partition_num" = "30"',#     properties_content# )# 清理多余的逗號和空白行properties_content = re.sub(r",\s*,", ",", properties_content)  # 清理多余的逗號properties_content = re.sub(r"\n\s*\n", "\n", properties_content)  # 清理空白行"""最后一個屬性后 會有逗號,進行替換"""# 正則表達式:匹配 PROPERTIES 塊中的最后一個逗號pattern = r'(?s)(PROPERTIES\s*\(.*?)(,\s*\);)'  # (?s) 表示單行模式,匹配換行符# 使用 re.sub 進行替換def remove_last_comma(match):# 如果匹配到逗號,則刪除return match.group(1) + match.group(2).replace(',', '')properties_content = re.sub(pattern, remove_last_comma, properties_content)# 更新回 SQL 語句updated_sql = step_one_sql.replace(match.group(1), properties_content)

三、小結

初步測試上述問題解決方案運行可行,后續遇到新問題再進行補充更新。現有的豆包之類的工具,著實提高了問題解決的效率,從而讓我們有了更多的思考時間。擁抱新工具,喜迎新未來。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/88019.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/88019.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/88019.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

社區云管家 - 智慧生活新方式 ——仙盟創夢IDE

社區服務熱門推薦數字化時代的社區服務新形態?在數字化浪潮席卷日常生活的今天,一個集多功能于一體的綜合社區官網正成為連接居民與社區服務的核心紐帶。這類平臺以 “一站式解決生活需求” 為核心,將看房、外賣、物業、快遞、求職、生鮮、出行、文具打…

MongoDB GridFS

MongoDB GridFS 引言 MongoDB 是一種高性能、可擴展的文檔存儲系統,它提供了靈活的數據模型和豐富的查詢功能。在處理大量非結構化數據時,MongoDB 的 GridFS 功能尤為突出。GridFS 是一種用于存儲和檢索大文件的解決方案,它可以存儲任意大小的文件,并將其分解為多個較小的…

Linux中程序的limits中的Max open files的配置由哪些參數決定

在 Linux 中,程序的 Max open files(最大打開文件數,即 ulimit -n)由多個層級的參數共同控制,具體如下: 1. 內核級全局限制(系統默認上限) 由 /proc/sys/fs/file-max 控制&#xff0…

git clone xxx.git 提示報錯:fatal: Unable to find remote helper for ‘http‘

[rootroot /home]# git clone http://gitlab.xxx.qunar.com/xx/xxx.git Cloning into ‘xxx’… fatal: Unable to find remote helper for ‘http’ 我今天在Linux服務器上執行git clone一個倉庫的代碼到機器上,但是執行的時候提示上面的錯誤,我就很詫異…

【機器學習筆記Ⅰ】10 特征工程

特征工程(Feature Engineering)詳解 特征工程是機器學習和數據科學中的核心環節,旨在通過對原始數據的轉換、組合和提取,構建更適合模型的高質量特征。其質量直接決定模型性能上限(“數據和特征決定了模型的上限&#…

20250708-03-string結構及命令詳解_筆記

一、字符串操作1. set命令1)set命令詳解基本語法與參數命令格式:set key value [ex 秒數]/[px 毫秒數][nx]/[xx]有效期設置:ex參數:以秒為單位設置過期時間,如set a 1 ex 10表示1…

SpringBoot3-集成MybatisPlus

此次操作是在多模塊下進行的&#xff0c;SpringBoot3-規劃多模塊目錄 添加管理依賴 根模塊 zibocoder-parent 的 pom.xml 中添加 MybatisPlus bom 管理依賴 <properties>...<mybatis-plus.version>3.5.12</mybatis-plus.version>... </properties> <…

部署MongoDB

環境:CentOS7 添加 MongoDB 官方 YUM 倉庫 sudo vi /etc/yum.repos.d/mongodb-org-6.0.repo 將以下內容粘貼到文件中(以 MongoDB 6.0 為例): [mongodb-org-6.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86…

重學前端002 --響應式網頁設計 CSS 基礎

文章目錄css 樣式特殊說明根據在這里 Freecodecamp 實踐&#xff0c;調整順序后做的總結。 css 樣式 body {background-color: red; # 跟background-image 不同時使用background-image: url(https://cdn.freecodecamp.org/curriculum/css-cafe/beans.jpg);font-family: sans-…

Zig高并發爬取數據簡潔模版

上文中我們介紹了Zig語言得爬蟲的有些優劣勢&#xff0c;想必大家對于自身項目選擇那種語言做爬蟲應該有些思路了&#xff0c;今天我將使用Zig的標準庫來構建一個簡單的高并發爬蟲模板。由于Zig的異步機制和標準庫中的http模塊&#xff0c;我們可以實現一個基于事件循環的爬蟲。…

IS-IS 協議 | LSP 傳輸與鏈路狀態數據庫同步機制

略作整理&#xff0c;待校。IS-IS 中 SRM 與 SSN 標志的作用及協同機制 SRM 和 SSN 標志的作用 在 IS-IS 協議中&#xff0c;SRM 和 SSN 是兩個關鍵標志&#xff0c;用于控制和優化 LSP&#xff08;Link State PDU,鏈路狀態信息&#xff09;在網絡中的泛洪與同步過程。 一、SRM…

xxl-job 改造適配pg數據后的Jenkins自動部署

接上文適配pg數據庫之后需要進行部署&#xff0c;便有了此文 1.下載并安裝Jenkins如下&#xff1a; https://mirrors.jenkins.io/war-stable/2.504.3/jenkins.war nohup java -jar jenkins.war --httpPort8080 & 啟動Jenkins并解鎖安裝需要的環境&#xff0c;git&#xff0…

數據庫Oracle從入門到精通!第四天(并發、鎖、視圖)

八、并發控制數據庫是一個共享資源&#xff0c;可以為多個應用程序所共享&#xff0c;這些程序可以串行執行&#xff08;排隊執行&#xff09;&#xff0c;但是很多情況下&#xff0c;可能出現多個程序或一個程序中的多個進程并行的執行&#xff0c;這就是數據庫的并行操作&…

EXCEL(帶圖)轉html

文章目錄敘述1、效果2、excel 轉換主邏輯3、其他補充3.0 主前端bootstrap3.1 my.css&#xff1a;3.2 my.js3.3 入口home.html3.4 Data.ashx敘述 要實現H5 展示excel 查詢 了一下沒有好的辦法,自己寫了一個,簡單記錄一下 1、效果 用bootstrap 根據sheet做了一個菜單。 2、exc…

小程序富文本Editor插入圖片、超鏈接、公式等的一次嘗試

小程序插入圖片 通過EditorContext.insertImage接口可以實現圖片的插入&#xff1a; EditorContext.insertImage({src,width,height,data, })如何插入超鏈接、公式、視頻、表格等等? 通過EditorContext.insertCustomBlock應該是可以實現的&#xff0c;具體實現方式我沒有了…

傳輸層協議TCP、UDP

傳輸層協議TCP、UDP 1、TCP和UDP報文格式 傳輸層協議TCPvsUDP 傳輸層主要兩個傳輸協議&#xff0c;分別是TCP和UDP&#xff0c;負責提供流量控制、排序服務和錯誤校驗。 &#xff08;1&#xff09;TCP是面向連接的&#xff0c;一般用于傳輸數據量比較少&#xff0c;且對可靠性要…

設計模式—專欄簡介

大學總是忙著參加ACM實驗室的各種事情&#xff0c;到了畢業的時候&#xff0c;對于設計模式也是僅了解單例模式。畢業后&#xff0c;剛開始代碼也是亂寫一通&#xff0c;完全沒有章法。整個開發環境也是為了解決問題&#xff0c;從來沒有考慮結構化什么的&#xff08;沒辦法&am…

面試150 鏈表的復制

思路 python可以使用調庫法&#xff0c;使用深度拷貝 """ # Definition for a Node. class Node:def __init__(self, x: int, next: Node None, random: Node None):self.val int(x)self.next nextself.random random """class Solution:de…

MySQL分布式ID沖突詳解:場景、原因與解決方案

引言 在分布式系統開發中&#xff0c;你是否遇到過這樣的崩潰時刻&#xff1f;——明明每個數據庫實例的自增ID都從1開始&#xff0c;插入數據時卻提示“Duplicate entry ‘100’ for key ‘PRIMARY’”&#xff1b;或者分庫分表后&#xff0c;不同庫里的訂單ID竟然重復&#x…

c++文字游戲_闖關打怪2.0(開源)

本次更新內容: 1.增強對手性能 2.可暫停(按N) 3.修復些許bug 4.增加boos關(第10、20、30...關) 1. 游戲概述 本游戲是一個基于Windows控制臺的回合制戰斗游戲,采用俯視視角的2D平面設計。玩家控制角色"p"在1325大小的封閉場景中與敵人"@"戰斗,通過…