本文为您介绍在 TDSQL Boundless 只读分析实例中,支持使用的 SELECT 查询语句及相关说明。
对象权限说明
在只读分析实例中,仅已完全加载到列存只读分析引擎的数据对象可以进行数据查询。查询数据需要拥有对应数据表的 SELECT 权限,若无权限,请通过 TDSQL Boundless 账号管理进行对象权限赋予,操作请参见 修改账号权限。
SELECT 语句
只读分析实例支持使用 SELECT 语句进行数据查询,语法骨架如下所示。
[WITH [RECURSIVE] cte_name [(col_name [, col_name] ...)] AS (subquery)[, cte_name [(col_name [, col_name] ...)] AS (subquery)] ...]SELECT[ALL | DISTINCT | DISTINCTROW]select_expr [, select_expr] ...[FROM table_references[WHERE where_condition][GROUP BY {col_name | expr | position} [, ...][WITH ROLLUP]][HAVING where_condition][WINDOW window_name AS (window_spec)[, window_name AS (window_spec)] ...][ORDER BY {col_name | expr | position} [ASC | DESC] [, ...]][LIMIT {[offset,] row_count | row_count OFFSET offset}]]
只读分析实例支持的 SELECT 语法特性如下:
支持
WITH 公共表表达式(CTE),包括 WITH RECURSIVE 递归 CTE。支持
UNION、UNION ALL、INTERSECT、INTERSECT ALL、EXCEPT、EXCEPT ALL 集合运算。支持
INNER JOIN、LEFT JOIN、RIGHT JOIN、CROSS JOIN、STRAIGHT_JOIN 表连接。支持窗口函数(
OVER 子句)。支持标量子查询、
IN 子查询、EXISTS 子查询及相关子查询。支持
GROUP BY ... WITH ROLLUP 多维聚合。SELECT 语句中不生效或不支持的子句
下文介绍 MySQL 完整 SELECT 语法中在只读分析实例中不生效或不支持的语句单元。
不生效但不影响执行的子句
下列关键字或选项在只读分析实例中不生效,但保留这些关键字不会影响 SQL 语句的执行结果。
HIGH_PRIORITY:用于设置 SELECT 语句执行优先级。只读分析实例基于自身的列式执行优化器进行调度,该关键字不生效。STRAIGHT_JOIN(作为 SELECT 选项使用时):用于强制优化器按照子句中列出的顺序进行表连接。只读分析实例完全基于自身的列式执行优化器进行执行计划选择,该关键字不生效。SQL_SMALL_RESULT、SQL_BIG_RESULT、SQL_BUFFER_RESULT、SQL_NO_CACHE、SQL_CALC_FOUND_ROWS:上述查询选项在只读分析实例中均不生效。不支持且会导致语句执行失败的子句
下列子句在只读分析实例中不支持,使用后将导致 SQL 语句执行失败。
PARTITION (partition_list) 子句:只读分析实例当前不支持分区表的查询路径,使用该子句的查询将执行失败。FOR UPDATE 子句:只读分析实例面向只读分析场景,不支持行级排他锁,使用该子句的查询将执行失败。LOCK IN SHARE MODE 子句:只读分析实例默认不支持行级共享锁,使用该子句的查询将执行失败。INTO DUMPFILE 子句:在语法解析阶段即报错。INTO @variable 子句:在语法解析阶段即报错。说明:
LOCK IN SHARE MODE 子句可通过将系统变量 libra_enable_noop_functions 设置为 ON 启用为空操作(noop)兼容模式,启用后该子句在语法上被接受但不会产生实际加锁效果。INTO OUTFILE 子句在语法上可被解析,执行时还需具备相应的 FILE 权限及环境配置,建议在只读分析实例中避免使用。