首页 > 数据库 >Doris MySQL SQL语法兼容性说明

Doris MySQL SQL语法兼容性说明

时间:2024-09-24 16:50:52浏览次数:3  
标签:name MySQL signed 语法 支持 SQL Doris

MySQL 兼容性

Doris 是高度兼容 MySQL 语法,支持标准 SQL。但是 Doris 与 MySQL 还是有很多不同的地方,下面给出了他们的差异点介绍。

数据类型

数字类型

类型MySQLDoris
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

日期类型

类型MySQLDoris
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:ss[.fraction]- 支持 - DATETIME([P]),可选参数 P 表示精度 - 范围:[‘0000-01-01 00:00:00[.000000]’, ‘9999-12-31 23:59:59[.999999]’] - 格式:YYYY-MM-DD hh:mm:ss[.fraction]
Timestamp- 支持 - Timestamp[§],可选参数 P 表示精度 - 范围:[‘1970-01-01 00:00:01.000000’ UTC , ‘2038-01-19 03:14:07.999999’ UTC] - 格式:YYYY-MM-DD hh:mm:ss[.fraction]- 不支持
Time- 支持 - Time[§] - 范围:[‘-838:59:59.000000’ to ‘838:59:59.000000’] - 格式:hh:mm:ss[.fraction]- 不支持
Year- 支持 - 范围:1901 to 2155, or 0000 - 格式:yyyy- 不支持

字符串类型

类型MySQLDoris
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 数据类型

类型MySQLDoris
JSON- 支持- 支持

Doris 特有的数据类型

  • HyperLogLog

    HLL 不能作为 key 列使用,支持在 Aggregate 模型、Duplicate 模型和 Unique 模型的表中使用。在 Aggregate 模型表中使用时,建表时配合的聚合类型为 HLL_UNION。用户不需要指定长度和默认值。长度根据数据的聚合程度系统内控制。并且 HLL 列只能通过配套的 hll_union_agg、hll_raw_agg、hll_cardinality、hll_hash 进行查询或使用。

    HLL 是模糊去重,在数据量大的情况性能优于 Count Distinct。HLL 的误差通常在 1% 左右,有时会达到 2%。

  • Bitmap

    BITMAP 类型的列可以在 Aggregate 表、Unique 表或 Duplicate 表中使用。在 Unique 表或 duplicate 表中使用时,其必须作为非 key 列使用。在 Aggregate 表中使用时,其必须作为非 key 列使用,且建表时配合的聚合类型为 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 不能作为 key 列使用,支持在 Aggregate 模型、Duplicate 模型和 Unique 模型的表中使用。在 Aggregate 模型表中使用时,建表时配合的聚合类型为 QUANTILE_UNION。用户不需要指定长度和默认值。长度根据数据的聚合程度系统内控制。并且 QUANTILE_STATE 列只能通过配套的 QUANTILE_PERCENT、QUANTILE_UNION、TO_QUANTILE_STATE 等函数进行查询或使用。

    QUANTILE_STATE 是一种计算分位数近似值的类型,在导入时会对相同的 key,不同 value 进行预聚合,当 value 数量不超过 2048 时采用明细记录所有数据,当 value 数量大于 2048 时采用 TDigest 算法,对数据进行聚合(聚类)保存聚类后的质心点。

  • Array<T>

    由 T 类型元素组成的数组,不能作为 key 列使用。目前支持在 Duplicate 模型的表中使用,也支持在 Unique 模型的表中非 key 列使用。

    T 类型:BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, LARGEINT, FLOAT, DOUBLE, DECIMAL, DATE, DATETIME,CHAR, VARCHAR, STRING

  • MAP<K, V>

    由 K, V 类型元素组成的 map,不能作为 key 列使用。目前支持在 Duplicate,Unique 模型的表中使用。

K,V 支持的类型有:BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, LARGEINT, FLOAT, DOUBLE, DECIMAL, DATE, DATETIME, CHAR, VARCHAR, STRING

  • STRUCT<field_name:field_type, … >

    由多个 Field 组成的结构体,也可被理解为多个列的集合。不能作为 Key 使用,目前 STRUCT 仅支持在 Duplicate 模型的表中使用。

    一个 Struct 中的 Field 的名字和数量固定,总是为 Nullable,一个 Field 通常由下面部分组成。

    • field_name: Field 的标识符,不可重复
    • field_type: Field 的类型

    当前可支持的类型有:BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, LARGEINT, FLOAT, DOUBLE, DECIMAL, DATE, DATETIME, CHAR, VARCHAR, STRING

  • Agg_State

    AGG_STATE 不能作为 key 列使用,建表时需要同时声明聚合函数的签名。

    用户不需要指定长度和默认值。实际存储的数据大小与函数实现有关。

    AGG_STATE 只能配合state /merge/union函数组合器使用。

语法区别

DDL

Create-Table

01 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]

02 与 MySQL 的不同之处

  • column_definition_list
    • 字段列表定义,基本语法与 MySQL 类似,会多出一个聚合类型的操作
    • 聚合类型的操作,主要支持数据模型为 AGGREGATE,Duplicate
    • MySQL 可以在建表定义字段列表的时候,还可以在字段后面加上 Index 等约束,例如 primary key,unique key 等,但是 Doris 是通过定义数据模型来约束和计算的。
  • index_definition_list
    • 索引列表定义,基本语法与 MySQL 类似,支持位图索引、倒排索引和 N-Gram 索引,但是布隆过滤器索引是通过属性设置。
    • 而 MySQL 支持的 index 有 B+Tree,Hash。
  • engine_type
    • 表引擎类型,可选
    • 目前支持的表引擎主要是 olap 这种原生引擎。
    • MySQL 支持的存储引擎有:Innodb,MyISAM 等
  • keys_type
    • 数据模型,可选
    • 支持的类型
      • DUPLICATE KEY(默认):其后指定的列为排序列。
      • AGGREGATE KEY:其后指定的列为维度列。
      • UNIQUE KEY:其后指定的列为主键列。
    • MySQL 则没有数据模型的概念。
  • table_comment
    • 表注释
  • partition_info
    • 分区算法,可选
    • 支持的分区算法
      • LESS THAN:仅定义分区上界。下界由上一个分区的上界决定。
      • FIXED RANGE:定义分区的左闭右开区间。
      • MULTI RANGE:批量创建 RANGE 分区,定义分区的左闭右开区间,设定时间单位和步长,时间单位支持年、月、日、周和小时。
      • MULTI RANGE:批量创建数字类型的 RANGE 分区,定义分区的左闭右开区间,设定步长。
    • MySQL 支持的算法:Hash,Range,List,并且还支持子分区,子分区支持的算法只有 Hash。
  • distribution_desc
    • 分桶算法,必选
    • 分桶算法
      • Hash 分桶语法:DISTRIBUTED BY HASH (k1[,k2 …]) [BUCKETS num|auto] 说明:使用指定的 key 列进行哈希分桶。
      • 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 不一致

03 Create-Index

CREATE INDEX [IF NOT EXISTS] index_name ON table_name (column [, ...],) [USING BITMAP];
  • 目前支持:位图索引、倒排索引和 N-Gram 索引,布隆过滤器索引(单独的语法设置)
  • MySQL 支持的索引算法有:B+Tree,Hash

04 Create-View

CREATE VIEW [IF NOT EXISTS]
 [db_name.]view_name
 (column1[ COMMENT "col comment"][, column2, ...])
AS query_stmt

CREATE 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 支持两种物化视图,同步物化视图和异步物化视图(从 v2.1 开始)。Doris 的异步物化视图更加强大。
  • MySQL 仅支持异步物化视图

05 Alter-Table/Alter-Index

Doris Alter 的语法与 MySQL 的基本一致。

Drop-Table/Drop-Index

Doris Drop 的语法与 MySQL 的基本一致

DML

Insert

INSERT INTO table_name
    [ PARTITION (p1, ...) ]
    [ WITH LABEL label]
    [ (column [, ...]) ]
    [ [ hint [, ...] ] ]
    { VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }

Doris Insert 语法与 MySQL 的基本一致。

Update

UPDATE target_table [table_alias]
    SET assignment_list
    WHERE condition

assignment_list:
    assignment [, assignment] ...

assignment:
    col_name = value

value:
    {expr | DEFAULT}

Doris Update 语法与 MySQL 基本一致,但需要注意的是必须加上 where 条件。

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 是一个分析数据库,所以删除不能过于频繁。

Select

SELECT
    [hint_statement, ...]
    [ALL | DISTINCT | DISTINCTROW | ALL EXCEPT ( col_name1 [, col_name2, col_name3, ...] )]
    select_expr [, select_expr ...]
    [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,] row_count | row_count OFFSET offset}]
    [INTO OUTFILE 'file_name']

Doris Select 语法与 MySQL 基本一致

SQL Function

Doris Function 基本覆盖绝大部分 MySQL Function。


links:

MySQL 兼容性 - Apache Doris

标签:name,MySQL,signed,语法,支持,SQL,Doris
From: https://blog.csdn.net/a772304419/article/details/142493823

相关文章

  • Spark(十)SparkSQL DataSet
    DataSetDataSet是具有强类型的数据集合,需要提供对应的类型信息1.创建DataSet使用样例类序列创建DataSetscala>caseclassperson(id:Int,name:String,age:Int)definedclasspersonscala>valcaseClassDS=Seq(person(1,"zhangsan",23)).toDS()caseClassDS:org.apa......
  • 55 mysql 的登录认证流程
    前言这里我们来看一下 mysql 的认证的流程 我们这里仅仅看 我们最常见的一个认证的处理流程我们经常会登录的时候 碰到各种异常信息  认证失败的大体流程大概的流程是这样 客户端和服务器建立连接之后, 服务器向客户端发送 salt然后 客户端根据salt 将客户端传入的密......
  • MySQL GROUP BY 分区大小写问题解析
    在数据库操作中,GROUPBY是一个常用的SQL语句,用于根据一个或多个列的值对结果集进行分组。然而,在使用MySQL时,你可能会遇到一个常见问题:大小写敏感性。本文将探讨MySQL中GROUPBY的大小写敏感性问题,并提供一些解决方案。什么是大小写敏感性?在计算机科学中,大小写敏感性是指......
  • MySQL深度探索:掌握触发器自动化与精细用户权限管理,提升数据库效能与安全
     作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 座右铭:   云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团儿.-CSDN博客目录前言:触发器(Triggers):用户权限(UserPermissions):一.触发器1.MySQL触发器简介2.引发触发器执行的事件,......
  • docker 配置代理访问Error response from daemon: Get “https://index.docker.io/v1/
    一、前言报错原因,docker访问不到外网。并且docker不能直接依赖操作系统环境的proxy,因此需要独立配置docker的proxy才能访问外网。问题描述dockersearchmysql出现以下报错:[root@localhost~]#dockersearchmysqlErrorresponsefromdaemon:Get"https://index.docke......
  • Spark(九)SparkSQL DataFrame
    DataFrameSparkSQL的DataFrameAPI允许我们使用DataFrame而不用必须去注册临时表或者生成SQL表达式,DataFrameAPI既有transformation操作也有action操作1.创建DataFrame从Spark数据源进行创建启动SparkShell[user@hadoop102spark-yarn]$bin/spark-shell查看Spark......
  • MySQL 函数的使用
    目录函数时间日期函数:字符串函数数学函数其他函数函数时间日期函数:所有的时间日期函数都是从完整的时间日期开始,根据需求进行截断;例如需要时间,则只显示时间部分;需要日期就显示日期部分;获得年月日:selectcurrent_date();+----------------+|current_......
  • pbootcms网站是使用sqlite数据库好还是使用mysql数据库好
    选择在PbootCMS网站上使用SQLite数据库还是MySQL数据库取决于几个因素,包括但不限于网站规模、预期的访问量、并发需求以及维护成本等。以下是两者的对比:SQLite架构:SQLite是一种嵌入式的关系型数据库管理系统,它不需要单独的服务器进程或系统。适用场景:适用于小型应用程序,访问量......
  • Pbootcms数据库转换教程(sqlite转mysql详细教程)
    一、准备工作下载转换所需工具:确保你有SQLiteStudio和phpMyAdmin等工具。备份现有数据:在进行任何操作之前,请确保备份现有的SQLite数据库文件。二、教程1.导出SQLite数据库打开SQLiteStudio:启动SQLiteStudio软件。定位数据库文件:找到PbootCMS的data文件夹下的.db文件。......
  • pbootcms如何将默认的sqlite转换成mysql数据库
    将PbootCMS使用的SQLite数据库转换为MySQL数据库可以通过以下几个步骤实现:准备工作备份当前SQLite数据库:在开始转换前,确保你有一个完整的SQLite数据库备份,以防转换过程中出现任何问题。准备MySQL环境:确保你的服务器上已经安装并配置好了MySQL服务,并且创建了一个新的数据库供Pb......