目录

    • 零、前言
    • 一、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大小的封闭场景中与敌人"@"战斗,通过…