Mysql迁移StartRocks记录

Mysql迁移至StartRocks过程中SQL兼容性调整记录
Mysql迁移StartRocks记录
type
status
date
slug
summary
tags
category
icon
password
AI 摘要
项目上的系统已经上线很多年,数据量积累的越来越多,有些单表甚至超过了 2 千万条数据,导致系统查询时,只有涉及到这些大表就会变得很慢,很影响使用系统的体验。
于是将这些大表迁移到 StartRocks 数据库,之前还只没有听说过这个数据库,查了下官网介绍如下:
StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。StarRocks 既支持从各类实时和离线的数据源高效导入数据,也支持直接分析数据湖上各种格式的数据。StarRocks 兼容 MySQL 协议,可使用 MySQL 客户端和常用 BI 工具对接。同时 StarRocks 具备水平扩展,高可用、高可靠、易运维等特性。广泛应用于实时数仓、OLAP 报表、数据湖分析等场景。
关键点是兼容 Mysql 协议,因为当前项目上的系统就是使用的 Mysql,这样切换成 StartRocks 基本不需要做什么改动。
因为只是部分查询接入 StartRocks,因此需要通过动态切换数据源来实现,具体实现这里不展开,只记录问题
 
💡
版本说明:Mysql 5.7.25,StartRocks 2.5.17
 

问题记录

子查询

对接过程中,有一个查询的 SQL 中在 Where 中使用到了子查询,切换成 StartRocks 查询时报错:
Subquery in left-side child of in-predicate is not supported
notion image
于是将子查询更换为 EXISTS 语法查询,但又出现另外一个报错:
Currently only subquery of the Select type are supported
因为当前子查询中使用到了 UNION ALL,看提示应该也是不支持
于是将UNION ALL联合的两个子查询分开,分别使用EXISTS去查询,经验证 StartRocks 查询无问题
 

group_concat

部分语法不支持

最新版本文档中对group_concat的介绍中有提到
  1. 从 3.0.6,3.1.3 版本开始,group_concat 支持使用 DISTINCT 和 ORDER BY
  1. 从 v3.0.6 和 v3.1.3 版本起,分隔符必须使用 SEPARATOR 关键字来声明
由于本文环境使用的StartRocks版本为2.5.17,所以group_concat不支持使用DISTINCTORDER BYSEPARATOR
 
在使用过程中会有些差异,比如以下SQL
在Mysql中查询结果为
notion image
但是在StartRocks中查询的结果为
notion image
可以看到区别在于
  1. Mysql中如果没有使用SEPARATOR 指定分隔符的话,是先按指定字符拼接,再拼接默认的分隔符-逗号
  1. StartRocks中因为这里是2.5版本不支持使用SEPARATOR 但其实默认第二个参数就是指定分隔符,因为结果只是按分隔符进行了拼接
因此,如果我们想让StartRocks展示效果与Mysql一样,则需要把SQL进行改造
改造后在StartRocks中查询结果如下,与Mysql展示的结果一致
notion image
 
上一篇
ChatGPT与豆包的图像生成
下一篇
注解结合切面实现键值转换
Loading...
2024-11-11
Latest posts
ChatGPT与豆包的图像生成
2024-11-12
Windows10家庭版安装Docker记录
2024-11-12
Mybatis Log Parser插件
2024-11-11
职责链模式实践
2024-11-11
Feign调用超时时间配置不生效问题排查
2024-11-11
OpenFeign源码分析
2024-11-11