本节列出了 HeatWave 不支持的功能。它不是有关数据类型、函数、运算符和 SQL 模式的详尽列表。对于 HeatWave 支持的数据类型、函数、运算符和 SQL 模式,请参阅第 2.9 节“支持的数据类型”、 第 2.11 节“支持的函数和运算符”和 第 2.10 节“支持的 SQL 模式”。如果特定的数据类型、函数、运算符或 SQL 模式没有出现在那些表和列表中,则应将其视为不受支持。
空间数据类型。请参阅 空间数据类型。
表达式运算中精度大于 18 的十进制值,表达式运算除外
ABS()
。ENUM
键入列作为UNION
或非顶级UNION ALL
SELECT
列表的一部分或作为JOIN
键,除非在受支持的表达式中使用。-
ENUM
类型支持仅限于:与字符串或数字常量以及其他数字、非时间表达式(数字列、常量和具有数字结果的函数)进行比较。
BETWEEN
带有数字参数的 比较运算符(<、<=、<=>、=、>=、> 和)。带有字符串常量的比较运算符(=、<=> 和 <>)。
enum_col
IS [NOT] {NULL|TRUE|FALSE}该
IN()
函数结合了数字参数(常量、函数或列)和字符串常量。CAST(
. 强制转换数字索引值,而不是关联的字符串值。enum_col
AS {[N]CHAR [(X)]|SIGNED|UNSIGNED|FLOAT|DOUBLE|DECIMAL [(M,N)]})CAST(
仅在enum_col
) AS {[N]CHAR}SELECT
列表中且未嵌套在另一个表达式中时受支持。
只有严格的 SQL 模式才支持时间类型。请参阅严格 SQL 模式。
位函数和运算符。
CAST()
ASSIGNED
和UNSIGNED
时间值。有关支持的CAST()
操作,请参阅 第 2.11.3 节,“Cast 函数和运算符”。COALESCE()
作为JOIN
谓词。CONVERT_TZ()
具有命名时区,例如“MET
”或“Europe/Amsterdam
”。仅支持日期时间值。可以使用等效的日期时间值重写使用命名时区的查询;例如,SELECT CONVERT_TZ(O_ORDERDATE, 'UTC','EST') FROM tpch.orders
可以改写为SELECT CONVERT_TZ(O_ORDERDATE, '+00:00','-05:00') FROM tpch.orders
.全文搜索功能。
XML、JSON、Spatial 和其他特定领域的功能。
可加载函数。
-
ORDER BY
字典编码的字符串列 (
RAPID_COLUMN=ENCODING=SORTED
)。请参阅 第 2.12.2 节,“字典编码”。WITH ROLLUP
GROUP_CONCAT()
仅在严格模式下受支持。 -
GREATEST()
和LEAST()
功能与YEAR
类型。DATE
,DATETIME
,TIME
, 和TIMESTAMP
支持是在 MySQL 8.0.30 中添加的。GREATEST()
并且LEAST()
不支持时间和非时间类型之间的比较。 类型上的日期函数
YEAR
。未编码的列上的字符串函数和运算符
VARLEN
。请参阅 第 2.7.1 节,“编码字符串列”。在某些情况下,由于 HeatWave 返回不正确的结果,比较函数会混合使用字符串和非字符串参数。
AVG()
具有枚举和时间数据类型 的聚合函数。-
以下具有枚举、字符串和时间数据类型的聚合函数:
除了 之外
SUM()
,由于浮点结果的不确定性和潜在的不匹配,半连接谓词中的相同聚合函数。例如,不支持以下用途:SELECT FROM A WHERE a1 IN (SELECT VAR_POP(b1) FROM B);
与 HeatWave 支持的数值数据类型不同的相同聚合函数。请参阅 第 2.9 节,“支持的数据类型”。
WEEK(
不支持date[,mode
])default_week_format
系统变量。要使用mode
参数,mode
必须显式定义值。
反连接,下面列出 的受支持
IN
和反连接变体除外。EXISTS
将该类型隐式转换(query cast injection)
YEAR
到其他类型。它只能与自身结合。时间到数字隐式转换(查询转换注入)。因此,时间类型不能与数字类型连接。
-
EXISTS
只有以下变体支持半连接和反连接:SELECT ... WHERE ... EXISTS (...)
SELECT ... WHERE ... EXISTS (...) IS TRUE
SELECT ... WHERE ... EXISTS (...) IS NOT FALSE
SELECT ... WHERE ... NOT EXISTS (...) IS FALSE
SELECT ... WHERE ... NOT EXISTS (...) IS NOT TRUE
根据 MySQL 执行的转换和优化,半连接的其他变体
EXISTS
可能会或可能不会被卸载。 -
IN
除了以下变体之外的半连接和反连接:SELECT ... WHERE ... IN (...)
SELECT ... WHERE ... IN (...) IS TRUE
SELECT ... WHERE ... NOT IN (...) IS FALSE
根据 MySQL 执行的转换和优化,半连接的其他变体
IN
可能会或可能不会被卸载。 由于 MySQL 优化和转换查询的方式,具有受支持的半连接或反连接条件的查询可能会被拒绝卸载。
半连接和反连接查询使用在评估前 10000 个可能的计划之后找到的最佳计划,或者在调查自上一个有效计划以来的 10000 个可能的计划之后找到的最佳计划。在每个派生表、外部查询和每个子查询之后,计划评估计数将重置为零。计划评估限制是必需的
DUPSWEEDOUT
,因为 HeatWave 不支持的连接策略可能会在连接顺序优化期间被 MySQL 作为回退策略(有关信息,请参阅 FIRSTMATCH).DUPSWEEDOUT
在 MySQL 生成大量使用半连接策略 的计划的情况下,计划评估限制可防止花费太多时间评估计划。没有为两个表定义相等条件的外连接查询。
一些外连接查询
IN ... EXISTS
在子句中带有子查询(半连接)ON
。
大多数非默认 MySQL DB 系统 SQL 模式。有关支持的 SQL 模式的列表,请参阅 第 2.10 节,“支持的 SQL 模式”。
一个
group_concat_max_len
会话变量,其值超过最大 HeatWave 列长度(65532 字节)。作为
sql_select_limit
全局变量。它仅支持作为会话变量。将更改传播到包含 列的表时,
time_zone
除SYSTEM
( ) 之外 的设置。在这种情况下传播更改会导致不正确的数据存储在 列中,从而导致不正确的查询结果。+00:00
TIMESTAMP
TIMESTAMP
-
在下列情况下,子句中的 修饰符
WITH ROLLUP
:GROUP BY
在包含不同聚合的查询中。
在包含重复
GROUP BY
键的查询中。
COUNT(NULL)
在它用作非聚合运算符的输入参数的情况下。-
UNION ALL
在不同列类型之间、字典编码列之间或 列之间使用ORDER BY
or 子句进行 查询。LIMIT
ENUM
UNION
在不同的列类型之间、字典编码的列之间或 列之间 使用或不使用ORDER BY
or 子句的查询。LIMIT
ENUM
UNION
以及UNION ALL
带有或不带有ORDER BY
orLIMIT
子句、不同列类型之间、字典编码列之间 、列之间或在or 子句ENUM
中指定的子查询。IN
EXISTS
如果键列是 ,则比较谓词 ,
GROUP BY
,JOIN
等等DOUBLE PRECISION
。关系数据的类型转换。例如,
SELECT CONCAT(2, L_COMMENT) from LINEITEM;
不支持。-
具有不可能
WHERE
条件的查询(已知具有空结果集的查询)。例如,以下查询未卸载:SELECT AVG(c1) AS value FROM t1 WHERE c1 IS NULL;
-
YEAR
使用表达式和其他函数 查询类型数据。例如,不会卸载以下查询:SELECT YEAR(d) + 1 FROM t1; SELECT YEAR(d) + c1 FROM t1; # where c1 is an integer column
涉及具有不同排序规则的列的字符串操作。
显式分区选择。请参阅 分区选择。
带有列前缀的主键。
虚拟生成的列。
作为触发器的一部分执行的查询。
调用存储程序的查询。
作为存储程序的一部分执行的查询。
作为多查询事务一部分的查询。
物化视图。仅支持非物化视图。请参阅使用视图。
常规查询的部分查询卸载
SELECT
。如果支持查询的所有元素,则卸载整个查询;否则,查询默认在 MySQL 数据库系统上执行。(HeatWave 支持CREATE TABLE ... SELECT
和INSERT ... SELECT
语句,其中只有SELECT
部分操作被卸载到 HeatWave。请参阅 第 2.3 节,“运行查询”。)SET timezone =
, 其timezone
timezone
值指定为 UTC 的偏移量,格式为[H]H:MM
+ 或 - 并以 + 或 - 为前缀,仅由UNIX_TIMESTAMP()
和FROM_UNIXTIME()
函数支持。不支持命名时区。有关时区偏移量的信息,请参阅 MySQL 服务器时区支持。将更改传播到包含列的表时,不支持( )
time_zone
以外 的设置。在这种情况下传播更改会导致不正确的数据存储在 列中,从而导致不正确的查询结果。SYSTEM
+00:00
TIMESTAMP
TIMESTAMP
中间和最终查询结果中的行宽超过 4MB。超过此行宽度限制的查询不会卸载到 HeatWave 进行处理。
-
对派生表的连续过滤操作。例如,不支持以下查询:
SELECT * FROM (SELECT * FROM t1 WHERE x < 7) tt1, (SELECT * FROM t1 WHERE x < y) tt2 WHERE tt1.x > 5 and tt1.x = tt2.x;
The query uses a filter for table
tt1
in the table scan of tablet1
(x < 7
) followed by a consecutive filter on tablett1
(tt1.x > 5
) in theWHERE
clause. Recursive common table expressions.
ALTER TABLE
MySQL Server运行在SUPER_READ_ONLY
模式下, 涉及加载、卸载或恢复数据等操作。SUPER_READ_ONLY
当 MySQL 服务器磁盘空间在特定持续时间内低于设定数量时,MySQL 服务器将进入模式。有关控制此行为的阈值以及如何禁用SUPER_READ_ONLY
模式的信息,请参阅 MySQL 数据库服务指南中的Health Monitor文档。