doris:MySQL 兼容性
Doris 高度兼容 MySQL 语法,支持标准 SQL。但是 Doris 与 MySQL 还是有很多不同的地方,下面给出了它们的差异点介绍。
数据类型
数字类型
| 类型 | MySQL | Doris |
|---|---|---|
| Boolean | - 支持 - 范围:0 代表 false,1 代表 true | - 支持 - 关键字:Boolean - 范围:0 代表 false,1 代表 true |
| Bit | - 支持 - 范围:1 ~ 64 | 不支持 |
| Tinyint | - 支持 - 支持 signed,unsigned - 范围:signed 的范围是 -128 ~ 127,unsigned 的范围是 0 ~ 255 | - 支持 - 只支持 signed - 范围:-128 ~ 127 |
| Smallint | - 支持 - 支持 signed,unsigned - 范围:signed 的范围是 -2^15 ~ 2^15-1,unsigned 的范围是 0 ~ 2^16-1 | - 支持 - 只支持 signed - 范围:-32768 ~ 32767 |
| Mediumint | - 支持 - 支持 signed,unsigned - 范围:signed 的范围是 -2^23 ~ 2^23-1,unsigned 的范围是 0 ~ -2^24-1 | - 不支持 |
| int | - 支持 - 支持 signed,unsigned - 范围:signed 的范围是 -2^31 ~ 2^31-1,unsigned 的范围是 0 ~ -2^32-1 | - 支持 - 只支持 signed - 范围: -2147483648~ 2147483647 |
| Bigint | - 支持 - 支持 signed,unsigned - 范围:signed 的范围是 -2^63 ~ 2^63-1,unsigned 的范围是 0 ~ 2^64-1 | - 支持 - 只支持 signed - 范围: -2^63 ~ 2^63-1 |
| Largeint | - 不支持 | - 支持 - 只支持 signed - 范围:-2^127 ~ 2^127-1 |
| Decimal | - 支持 - 支持 signed,unsigned(8.0.17 以前支持,该版本以上标记为 deprecated) - 默认值:Decimal(10, 0) | - 支持 - 只支持 signed - 默认值:Decimal(9, 0) |
| Float/Double | - 支持 - 支持 signed,unsigned(8.0.17 以前支持,该版本以上标记为 deprecated) | - 支持 - 只支持 signed |
日期类型
| 类型 | MySQL | Doris |
|---|---|---|
| Date | - 支持 - 范围:['1000-01-01','9999-12-31'] - 格式:YYYY-MM-DD | - 支持 - 范围:['0000-01-01', '9999-12-31'] - 格式:YYYY-MM-DD |
| DateTime | - 支持 - DATETIME([P]),可选参数 P 表示精度 - 范围:'1000-01-01 00:00:00.000000' ,'9999-12-31 23:59:59.999999' - 格式:YYYY-MM-DD hh:mm .fraction | - 支持 - DATETIME([P]),可选参数 P 表示精度 - 范围:['0000-01-01 00:00:00[.000000]', '9999-12-31 23:59:59[.999999]'] - 格式:YYYY-MM-DD hh:mm .fraction |
| Timestamp | - 支持 - Timestamp[(p)],可选参数 P 表示精度 - 范围:['1970-01-01 00:00:01.000000' UTC , '2038-01-19 03:14:07.999999' UTC] - 格式:YYYY-MM-DD hh:mm .fraction | - 不支持 |
| Time | - 支持 - Time[(p)] - 范围:['-838:59:59.000000' to '838:59:59.000000'] - 格式:hh:mm .fraction | - 不支持 |
| Year | - 支持 - 范围:1901 to 2155, or 0000 - 格式:yyyy | - 不支持 |
字符串类型
| 类型 | MySQL | Doris |
|---|---|---|
| Char | - 支持 - CHAR(M),M 为字符长度,缺省表示长度为 1 - 定长 - 范围:[0,255],字节大小 | - 支持 - CHAR(M),M 为字节长度 - 可变 - 范围:[1,255] |
| Varchar | - 支持 - VARCHAR(M),M 为字符长度 - 范围:[0,65535],字节大小 | - 支持 - VARCHAR(M),M 为字节长度。 - 范围:[1, 65533] |
| String | - 不支持 | - 支持 - 1048576 字节(1MB),可调大到 2147483643 字节(2G) |
| Binary | - 支持 - 类似于 Char | - 不支持 |
| Varbinary | - 支持 - 类似于 Varchar | - 不支持 |
| Blob | - 支持 - TinyBlob、Blob、MediumBlob、LongBlob | - 不支持 |
| Text | - 支持 - TinyText、Text、MediumText、LongText | - 不支持 |
| Enum | - 支持 - 最多支持 65535 个 elements | - 不支持 |
| Set | - 支持 - 最多支持 64 个 elements | - 不支持 |
JSON 数据类型
| 类型 | MySQL | Doris |
|---|---|---|
| JSON | 支持 | 支持 |
Doris 特有的数据类型
-
HyperLogLog
HLL 类型不能作为 Key 列使用。在 Aggregate 模型表中使用时,建表时配合的聚合类型为 HLL_UNION。用户不需要指定长度和默认值。长度根据数据的聚合程度系统内控制。并且 HLL 列只能通过配套的 HLL_UNION_AGG、HLL_RAW_AGG、HLL_CARDINALITY、HLL_HASH 进行查询或使用。
HLL 是模糊去重,在处理大数据量时,其性能优于 Count Distinct。HLL 的误差率通常在 1% 左右,有时可能会达到 2%。
-
BITMAP
BITMAP 类型不能作为 Key 列使用。在 Aggregate 表中使用时,还需配合 BITMAP_UNION 聚合定义。用户无需指定长度和默认值,长度会根据数据的聚合程度由系统内部控制。并且,BITMAP 列只能通过配套的 BITMAP_UNION_COUNT、BITMAP_UNION、BITMAP_HASH、BITMAP_HASH64 等函数进行查询或使用。
离线场景下使用 BITMAP 可能会影响导入速度,在数据量大的情况下,其查询速度会慢于 HLL,但优于 Count Distinct。注意:在实时场景下,如果 BITMAP 不使用全局字典,而使用了 BITMAP_HASH(),可能会导致约千分之一的误差。如果此误差不可接受,可以使用 BITMAP_HASH64。
-
QUANTILE_PERCENT(QUANTILE_STATE)
QUANTILE_STATE 类型不能作为 Key 列使用。在 Aggregate 模型表中使用时,建表时配合的聚合类型为 QUANTILE_UNION。用户不需要指定长度和默认值。长度根据数据的聚合程度系统内控制。并且 QUANTILE_STATE 列只能通过配套的 QUANTILE_PERCENT、QUANTILE_UNION、TO_QUANTILE_STATE 等函数进行查询或使用。
QUANTILE_STATE 是一种计算分位数近似值的类型,在导入时会对相同的 Key,不同 Value 进行预聚合,当 Value 数量不超过 2048 时,会采用明细记录所有数据,当 Value 数量大于 2048 时采用 TDigest 算法,对数据进行聚合(聚类),并保存聚类后的质心点。
-
Array<T>
Array 由 T 类型元素组成的数组,不能作为 Key 列使用。
-
MAP<K, V>
Map 是由 K, V 类型元素组成的映射表,不能作为 Key 列使用。
-
STRUCT<field_name:field_type, ... >
Struct 由多个 Field 组成的结构体,也可被理解为多个列的集合。不能作为 Key 使用。
一个 Struct 中的 Field 的名字和数量固定,且总是为 Nullable,一个 Field 通常由下面部分组成:
- field_name: Field 的标识符,不可重复
- field_type: Field 的类型
-
Agg_State
AGG_STATE 不能作为 Key 列使用,建表时需要同时声明聚合函数的签名。
用户不需要指定长度和默认值。实际存储的数据大小与函数实现有关。
AGG_STATE 只能配合STATE / MERGE / UNION函数组合器使用。
语法区别
DDL
1 CREATE TABLE
Doris 建表语法:
CREATE TABLE [IF NOT EXISTS] [database.]table
(column_definition_list[, index_definition_list]
)
[engine_type]
[keys_type]
[table_comment]
[partition_info]
distribution_desc
[rollup_list]
[properties]
[extra_properties]
与 MySQL 的不同之处:
| 参数 | 与 MySQL 不同之处 |
|---|---|
| column_definition_list | - 字段列表定义,其基本语法与 MySQL 类似。 - Doris 额外包含一个聚合类型的操作,主要支持的数据模型为 Aggregate Key。 - MySQL 允许在字段列表定义后添加 Index 等约束,如 Primary Key、Unique Key 等;而 Doris 则是通过定义数据模型来实现对这些约束和计算的支持。 |
| index_definition_list | - 索引列表定义,基本语法与 MySQL 类似 - MySQL 支持位图索引、倒排索引和 N-Gram 索引。另外可以通过属性设置布隆过滤器索引。 - MySQL 支持 B+Tree 索引和 Hash 索引。 |
| engine_type | - 表引擎类型,可选。 - 目前支持的表引擎主要是 OLAP 原生引擎。 - MySQL 支持的存储引擎有:Innodb,MyISAM 等 |
| keys_type | - 数据模型,可选。 - 支持的类型包括:1)DUPLICATE KEY(默认):其后指定的列为排序列。2)AGGREGATE KEY:其后指定的列为维度列。3)UNIQUE KEY:其后指定的列为主键列。 - MySQL 则没有数据模型的概念。 |
| table_comment | 表注释 |
| partition_info | 分区算法,可选。 Doris 支持的分区算法,包括: - LESS THAN:仅定义分区上界。下界由上一个分区的上界决定。 - FIXED RANGE:定义分区的左闭右开区间。 - MULTI RANGE:批量创建 RANGE 分区,定义分区的左闭右开区间,设定时间单位和步长,时间单位支持年、月、日、周和小时。 MySQL 支持的算法:Hash,Range,List Key,并且还支持子分区,子分区支持的算法有 Hash 和 Key。 |
| distribution_desc | - 分桶算法,必选,包括:1)Hash 分桶语法:DISTRIBUTED BY HASH (k1[,k2 ...]) [BUCKETS num|auto] 说明:使用指定的 key 列进行哈希分桶。2)Random 分桶语法:DISTRIBUTED BY RANDOM [BUCKETS num|auto] 说明:使用随机数进行分桶。 - MySQL 没有分桶算法。 |
| rollup_list | - 建表的同时可以创建多个同步物化视图。 - 语法: rollup_name (col1[, col2, ...]) [DUPLICATE KEY(col1[, col2, ...])][PROPERTIES("key" = "value")]- MySQL 不支持 |
| properties | 表属性,与 MySQL 的表属性不一致,定义表属性的语法也与 MySQL 不一致 |
2 CREATE INDEX
CREATE INDEX [IF NOT EXISTS] index_name ON table_name (column [, ...],) [USING BITMAP];
-
目前支持:位图索引、倒排索引和 N-Gram 索引,布隆过滤器索引(单独的语法设置)
-
MySQL 支持的索引算法有:B+Tree,Hash
3 CREATE VIEW
CREATE VIEW [IF NOT EXISTS][db_name.]view_name(column1[ COMMENT "col comment"][, column2, ...])
AS query_stmtCREATE MATERIALIZED VIEW (IF NOT EXISTS)? mvName=multipartIdentifier(LEFT_PAREN cols=simpleColumnDefs RIGHT_PAREN)? buildMode?(REFRESH refreshMethod? refreshTrigger?)?(KEY keys=identifierList)?(COMMENT STRING_LITERAL)?(PARTITION BY LEFT_PAREN partitionKey = identifier RIGHT_PAREN)?(DISTRIBUTED BY (HASH hashKeys=identifierList | RANDOM) (BUCKETS (INTEGER_VALUE | AUTO))?)?propertyClause?AS query
- 基本语法与 MySQL 一致
- Doris 除了支持逻辑视图外,还支持两种物化视图,同步物化视图和异步物化视图
- MySQL 不支持物化视图
4 ALTER TABLE / ALTER INDEX
Doris Alter 的语法与 MySQL 的基本一致。
DROP TABLE / DROP INDEX
Doris Drop 的语法与 MySQL 的基本一致
DML
1 INSERT
INSERT INTO table_name[ PARTITION (p1, ...) ][ WITH LABEL label][ (column [, ...]) ][ [ hint [, ...] ] ]{ VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }
Doris Insert 语法与 MySQL 的基本一致。
2 UPDATE
UPDATE target_table [table_alias]SET assignment_listWHERE conditionassignment_list:assignment [, assignment] ...assignment:col_name = valuevalue:{expr | DEFAULT}
Doris Update 语法与 MySQL 基本一致,但需要注意的是必须加上 WHERE 条件。
3 DELETE
DELETE FROM table_name [table_alias] [PARTITION partition_name | PARTITIONS (partition_name [, partition_name])]WHERE column_name op { value | value_list } [ AND column_name op { value | value_list } ...];
Doris 该语法只能指定过滤谓词
DELETE FROM table_name [table_alias][PARTITION partition_name | PARTITIONS (partition_name [, partition_name])][USING additional_tables]WHERE condition
Doris 该语法只能在 Unique Key 模型表上使用。
Doris Delete 语法与 MySQL 基本一致。但是由于 Doris 是一个分析数据库,所以删除不能过于频繁。
4 SELECT
SELECT[hint_statement, ...][ALL | DISTINCT]select_expr [, select_expr ...][EXCEPT ( col_name1 [, col_name2, col_name3, ...] )][FROM table_references[PARTITION partition_list][TABLET tabletid_list][TABLESAMPLE sample_value [ROWS | PERCENT][REPEATABLE pos_seek]][WHERE where_condition][GROUP BY [GROUPING SETS | ROLLUP | CUBE] {col_name | expr | position}][HAVING where_condition][ORDER BY {col_name | expr | position} [ASC | DESC], ...][LIMIT {[offset_count,] row_count | row_count OFFSET offset_count}][INTO OUTFILE 'file_name']
Doris Select 语法与 MySQL 基本一致
SQL Function
Doris Function 基本覆盖绝大部分 MySQL Function。
相关文章:
doris:MySQL 兼容性
Doris 高度兼容 MySQL 语法,支持标准 SQL。但是 Doris 与 MySQL 还是有很多不同的地方,下面给出了它们的差异点介绍。 数据类型 数字类型 类型MySQLDorisBoolean- 支持 - 范围:0 代表 false,1 代表 true- 支持 - 关键字&am…...
SQL中 的exists用法
EXISTS 是 SQL 中的一个子查询条件,用于检查子查询是否返回任何行。如果子查询返回至少一行,则 EXISTS 返回 TRUE。 例如,查询有订单的客户列表: SELECT * FROM customers c WHERE EXISTS (SELECT 1 FROM orders o WHERE o.cust…...
案例1.spark和flink分别实现作业配置动态更新案例
目录 目录 一、背景 二、解决 1.方法1:spark broadcast广播变量 a. 思路 b. 案例 ① 需求 ② 数据 ③ 代码 2.方法2:flink RichSourceFunction a. 思路 b. 案例 ① 需求 ② 数据 ③ 代码 ④ 测试验证 测试1 测试2 测试3 一、背景 在实时作业(如 Spark Str…...
大数据学习之SparkSql
95.SPARKSQL_简介 网址: https://spark.apache.org/sql/ Spark SQL 是 Spark 的一个模块,用于处理 结构化的数据 。 SparkSQL 特点 1 易整合 无缝的整合了 SQL 查询和 Spark 编程,随时用 SQL 或 DataFrame API 处理结构化数据。并且支…...
鸿蒙UI(ArkUI-方舟UI框架)- 使用文本
返回主章节 → 鸿蒙UI(ArkUI-方舟UI框架) 文本使用 文本显示 (Text/Span) Text是文本组件,通常用于展示用户视图,如显示文章的文字内容。Span则用于呈现显示行内文本。 创建文本 string字符串 Text("我是一段文本"…...
Spider 数据集上实现nlp2sql训练任务
NLP2SQL(自然语言处理到 SQL 查询的转换)是一个重要的自然语言处理(NLP)任务,其目标是将用户的自然语言问题转换为相应的 SQL 查询。这一任务在许多场景下具有广泛的应用,尤其是在与数据库交互的场景中&…...
数据结构——【树模板】
#思路 1、 结点类: 属性:数据,孩子结点列表 功能1:认孩子: 前提:在父子都是结点的情况下 2. 树类: 属性:根节点,生成初始化的总结点 功能1:获取初始化…...
R 数组:高效数据处理的基础
R 数组:高效数据处理的基础 引言 在数据科学和统计分析领域,R 语言以其强大的数据处理和分析能力而备受推崇。R 数组是 R 语言中用于存储和操作数据的基本数据结构。本文将详细介绍 R 数组的创建、操作和优化,帮助读者掌握 R 数组的使用技巧…...
【DeepSeek】DeepSeek概述 | 本地部署deepseek
目录 1 -> 概述 1.1 -> 技术特点 1.2 -> 模型发布 1.3 -> 应用领域 1.4 -> 优势与影响 2 -> 本地部署 2.1 -> 安装ollama 2.2 -> 部署deepseek-r1模型 1 -> 概述 DeepSeek是由中国的深度求索公司开发的一系列人工智能模型,以其…...
npm link,lerna,pnmp workspace区别
npm link、Lerna 和 pnpm workspace 是三种不同的工具/功能,用于处理 JavaScript 项目的依赖管理和 Monorepo 场景。它们的核心区别如下: 1. npm link 用途 本地调试依赖:将本地开发的包(Package A)临时链接到另一个…...
ASP.NET Core 使用 WebClient 从 URL 下载
本文使用 ASP .NET Core 3.1,但它在.NET 5、 .NET 6和.NET 8上也同样适用。如果使用较旧的.NET Framework,请参阅本文,不过,变化不大。 如果想要从 URL 下载任何数据类型,请参阅本文:HttpClient 使用WebC…...
【CubeMX-HAL库】STM32F407—无刷电机学习笔记
目录 简介: 学习资料: 跳转目录: 一、工程创建 二、板载LED 三、用户按键 四、蜂鸣器 1.完整IO控制代码 五、TFT彩屏驱动 六、ADC多通道 1.通道确认 2.CubeMX配置 ①开启对应的ADC通道 ②选择规则组通道 ③开启DMA ④开启ADC…...
vue3 点击图标从相册选择二维码图片,并使用jsqr解析二维码(含crypto-js加密解密过程)
vue3 点击图标从相册选择二维码图片,并使用jsqr解析二维码(含crypto-js加密解密过程) 1.安装 jsqr 和 crypto-js npm install -d jsqr npm install crypto-js2.在util目录下新建encryptionHelper.js文件,写加密解密方法。 // e…...
kafka 3.5.0 raft协议安装
前言 最近做项目,需要使用kafka进行通信,且只能使用kafka,笔者没有测试集群,就自己搭建了kafka集群,实际上笔者在很早之前就搭建了,因为当时还是zookeeper(简称ZK)注册元数据&#…...
用Kibana实现Elasticsearch索引的增删改查:实战指南
在大数据时代,Elasticsearch(简称 ES)和 Kibana 作为强大的数据搜索与可视化工具,受到了众多开发者的青睐。Kibana 提供了一个直观的界面,可以方便地对 Elasticsearch 中的数据进行操作。本文将详细介绍如何使用 Kiban…...
Redis基础笔记
一、基础知识 连接方式 CLI (Command Line Interface)API (Application Programming Interface)GUI (Graphical User Interface) 启动 redis-server连接到Redis(Redis CLI Client) redis redis-cli telnet 127.0.0.1 6379退出 quit/exit查看过期时…...
前后端服务配置
1、安装虚拟机(VirtualBox或者vmware),在虚拟机上配置centos(选择你需要的Linux版本),配置如nginx服务器等 1.1 VMware 下载路径Sign In注册下载 1.2 VirtualBox 下载路径https://www.virtualbox.org/wiki/Downloads 2、配置服…...
springboot 事务管理
在Spring Boot中,事务管理是通过Spring框架的事务管理模块来实现的。Spring提供了声明式事务管理和编程式事务管理两种方式。通常,我们使用声明式事务管理,因为它更简洁且易于维护。 1. 声明式事务管理 声明式事务管理是通过注解来实现的。…...
基于Typescript,使用Vite构建融合Vue.js的Babylon.js开发环境
一、创建Vite项目 使用Vite初始化一个VueTypeScript项目: npm create vitelatest my-babylon-app -- --template vue-ts cd my-babylon-app npm create vitelatest my-babylon-app -- --template vue-ts 命令用于快速创建一个基于 Vite 的 Vue TypeScript 项目。…...
在阿里云ECS上一键部署DeepSeek-R1
DeepSeek-R1 是一款开源模型,也提供了 API(接口)调用方式。据 DeepSeek介绍,DeepSeek-R1 后训练阶段大规模使用了强化学习技术,在只有极少标注数据的情况下提升了模型推理能力,该模型性能对标 OpenAl o1 正式版。DeepSeek-R1 推出…...
git SourceTree 使用
Source Tree 使用原理 文件的状态 创建仓库和提交 验证 再克隆的时候发发现一个问题,就是有一个 这个验证,起始很简单 就是 gitee 的账号和密码,但是要搞清楚的是账号不是名称,我之前一直再使用名称登录老是出问题 这个很简单的…...
游戏引擎学习第94天
仓库:https://gitee.com/mrxiao_com/2d_game_2 回顾上周的渲染器工作 完成一款游戏的开发,完全不依赖任何库和引擎,这样我们能够全面掌握游戏的开发过程,确保没有任何细节被隐藏。我们将深入探索每一个环节,犹如拿着手电筒翻看床…...
win32汇编环境,结构体的使用示例二
;运行效果 ;win32汇编环境,结构体的使用示例二 ;举例说明结构体的定义,如何访问其中的成员,使用assume指令指向某个结构体,计算结构数组所需的偏移量得到某个成员值等 ;直接抄进RadAsm可编译运行。重要部分加备注。 ;下面为asm文件 ;>>…...
DeepSeek从入门到精通教程PDF清华大学出版
DeepSeek爆火以来,各种应用方式层出不穷,对于很多人来说,还是特别模糊,有种雾里看花水中望月的感觉。 最近,清华大学新闻与传播学院新媒体研究中心,推出了一篇DeepSeek的使用教程,从最基础的是…...
【PDF提取内容】如何批量提取PDF里面的文字内容,把内容到处表格或者批量给PDF文件改名,基于C++的实现方案和步骤
以下分别介绍基于 C 批量提取 PDF 里文字内容并导出到表格,以及批量给 PDF 文件改名的实现方案、步骤和应用场景。 批量提取 PDF 文字内容并导出到表格 应用场景 文档数据整理:在处理大量学术论文、报告等 PDF 文档时,需要提取其中的关键信…...
SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来Matlab实现
SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来Matlab实现 目录 SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来Matlab实现预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来(优…...
大模型推理——MLA实现方案
1.整体流程 先上一张图来整体理解下MLA的计算过程 2.实现代码 import math import torch import torch.nn as nn# rms归一化 class RMSNorm(nn.Module):""""""def __init__(self, hidden_size, eps1e-6):super().__init__()self.weight nn.Pa…...
深度学习-神经机器翻译模型
以下为你介绍使用Python和深度学习框架Keras(基于TensorFlow后端)实现一个简单的神经机器翻译模型的详细步骤和代码示例,该示例主要处理英 - 法翻译任务。 1. 安装必要的库 首先,确保你已经安装了以下库: pip insta…...
Android Camera API 介绍
一 StreamConfigurationMap 1. StreamConfigurationMap 的作用 StreamConfigurationMap 是 Android Camera2 API 中的一个核心类,用于描述相机设备支持的输出流配置,包含以下信息: 支持的格式与分辨率:例如 YUV_420_888、JPEG、…...
大数据项目2:基于hadoop的电影推荐和分析系统设计和实现
前言 大数据项目源码资料说明: 大数据项目资料来自我多年工作中的开发积累与沉淀。 我分享的每个项目都有完整代码、数据、文档、效果图、部署文档及讲解视频。 可用于毕设、课设、学习、工作或者二次开发等,极大提升效率! 1、项目目标 本…...
