SQL 语法兼容

最近更新时间:2025-06-13 20:31:03

我的收藏
说明:
TDStore 列存功能在当前版本为实验特性,仅面向受邀用户开放。若您有需要可通过客户经理与我们联系并申请。

SQL 语法兼容说明

TDStore 列存向量引擎支持大部分标准常用 SQL 查询,支持全部 TPC-H 查询。但是又有自己特性,在某些场景下会由于不支持,导致 Fallback 到 TDStore行存引擎执行。具体限制如下:

用户自定义的变量

向量引擎不支持用户定义的变量,当查询 SQL 中出现用户自定义变量时( E.G: SELECT @myvar + col FROM table)时,该查询不通过向量引擎执行。
SET @cnt = 1;

SELECT *
FROM t1 FORCE INDEX (date_col)
WHERE
col1 + 10000000 > (@cnt := @cnt + 1)
AND date_col >= DATE('2014-04-01')
AND date_col < DATE('2014-04-01' + INTERVAL 1 DAY)
ORDER BY date_col DESC;

SELECT @cnt;

SQL_CALC_FOUND_ROWS / FOUND_ROWS()

向量引擎暂时不支持SQL_CALC_FOUND_ROWS 相关功能,带有下属关键字的 SQL 会 fallback 到 TDSQL TP 引擎执行。

WITH RECURSIVE cte

向量引擎暂时不支持 Recursive Common Table Expressions 功能,会 fallback 到 TDSQL TP 引擎执行。

UNION/UNION ALL + ORDER BY

对于 UNION/UNION ALL + ORDER BY 查询,向量引擎支持的ORDER BY字段,需要为UNION内子查询投影的字段。其他将 fallback 到 TDSQL TP 引擎执行。
--Suppoted--
SELECT a n FROM t1 UNION SELECT b n FROM t2 ORDER BY n;
--Unsuppoted--
SELECT a n FROM t1 UNION SELECT b n FROM t2 ORDER BY n * 2;

字符集和 Collation

向量引擎支持有限字符集和 Collation,其他会 fallback 到 TDSQL TP 引擎执行。
支持的字符集:"utf8", "utf8mb3", "utf8mb4", "binary"。
不支持的 Collation:"utf8_german2_ci", "utf8mb4_czech_ci", "latin1_german2_ci", "latin1_bin", "utf8mb4_lithuanian_ci", "utf8_lithuanian_ci", "utf8_czech_ci", "utf8mb4_polish_ci"。
表级限定,即只要表定义中有字段不属于上述字符集,即 fallback。
字符集兼容性:向量引擎对于字符串类型比较时,不区分大小写,区分 accent(即:case insensitive and accent sensitive)。这样对于有语调的字符串会出现与 MySQL 的 TP 结果不一致情形。举例如下:
tdsql [db1]> create table t1(c1 varchar(32), c2 varchar(32));
Query OK, 0 rows affected (0.70 sec)

tdsql[db1]> show create table t1;
+-------+-------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-------------------------------------------------------------------------------------------------------------------------------+
| t1 | CREATE TABLE `t1` (
`c1` varchar(32) DEFAULT NULL,
`c2` varchar(32) DEFAULT NULL
) ENGINE=ROCKSDB DEFAULT CHARSET=utf8mb3 |
+-------+-------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

tdsql[db1]> insert into t1 values('hello','hElLÖ');
Query OK, 1 row affected (0.02 sec)

tdsql[db1]> select * from t1;
+-------+--------+
| c1 | c2 |
+-------+--------+
| hello | hElLÖ |
+-------+--------+
1 row in set (0.00 sec)

tdsql[db1]> select c1=c2 from t1;
+-------+
| c1=c2 |
+-------+
| 1 |
+-------+
1 row in set (0.00 sec)

tdsql[db1]> set htap_routing_strategy='vector_engine';
Query OK, 0 rows affected (0.00 sec)

tdsql [db1]> set htap_query_passthrough_mode=off;
Query OK, 0 rows affected (0.00 sec)

tdsql[db1]> set htap_print_deparsed_query=on;
Query OK, 0 rows affected (0.00 sec)

tdsql[db1]> select c1=c2 from t1;
+-------+
| c1=c2 |
+-------+
| 0 |
+-------+
1 row in set, 1 warning (0.01 sec)

tdsql[db1]> show warnings;
+-------+------+-----------------------------------------------------------------------------------------------------+
| Level | Code | Message |
+-------+------+-----------------------------------------------------------------------------------------------------+
| Note | 1003 | Deparsed query is : select ("t1"."c1" = "t1"."c2" collate nocase ) AS "c1=c2" from "db1"."t1" "t1" |
+-------+------+-----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

向量引擎相关参数

序号
变量名称
类型
说明
1
htap_avoid_some_mysql_optimizations
布尔
是否进行优化器干预,来优化向量查询。缺省(on)
2
htap_enable_deparser_warnings
布尔
对于显示针对 VE 解析的报警。缺省(off)
3
htap_routing_strategy
字符串
查询的策略,有如下可能:
'VECTOR_ENGINE':缺省走向量引擎。
'DEFAULT':缺省都 TP 引擎。
4
htap_query_passthrough_mode
布尔
是否进行向量引擎语义解析,为 on 时将 SQL 直接传给 VE 引擎,并取得结果。缺省(off)
5
htap_print_deparsed_query
布尔
是否将向量解析引擎输出到日志文件。缺省(off)
6
htap_enable_ve_execution_fallback
布尔
当向量引擎报错时,是否需要 fallback 到 TP 执行或者直接报错。缺省(on)