一、对象权限说明
在只读分析实例中,仅已完全加载到列存只读分析引擎的数据对象可以进行数据查询。查询数据需要拥有对应数据表的 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 权限及环境配置,建议在只读分析实例中避免使用。