说明:
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)WHEREcol1 + 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) |