返回首页

gbase数据、南大通用产品文档:GBase8a_gbase_inmem_log_level

更新日期:2024年09月11日

取值:[0, 4]
默认值:1
说明:memlog 功能日志级别。
修改方式:可在配置文件中修改值。适用于global 范围。

功能说明
CTE(common table expression)可定义多个, 按书写顺序,支持后面的CTE 的
query_definition 中引用前面定义的CTE。
Expression_name 可以与数据库中的基础
表或者视图名称相同,主查询引用expression_name 标识符的地方,都是指CTE,
而不是数据库中的基础表或者视图,若没有书写库名将优先引用定义的CTE,若
书写了库名.表名,如test.t1 将引用基础表或视图。
语法格式
[
WITH
Expression_name AS
(
CTE_query_definition
)
, …
]
SELECT ……(主查询);

CTE_query_definition 为一条select 语句,仅支持select 查询语句,其它语句
不支持,其语法需符合GCluster 的select 查询的语法。其它语法约束与from
子查询一致(如定义语句不能为select … into outfile,不能为select …
into …server 等)。From 子查询中支持的语法,CTE 定义语句也同样支持。

Expression_name 为给出的CTE 名称,必须是一个符合GCluster 命名规范的
标识符,CTE 名称长度限定为64 个字符,由数字、字母和下划线组成,若
包含特殊字符需用反引号括起来。若定义了多个CTE,每个CTE 的名称必
须唯一。
示例
gbase> set _t_gcluster_support_cte=1;
示例1:定义一个CTE
gbase> with tt as (select * from t) select * from tt;
+------+------+
| a
| b
|
+------+------+

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1103
|
1 | aa
|
+------+------+
1 row in set (Elapsed: 00:00:00.76)
示例2:定义多个CTE
gbase> with tt1 as (select a,b from t),tt2 as (select a,b from t) select * from tt1
join tt2 on tt1.a=tt2.a;
+------+------+------+------+
| a
| b
| a
| b
|
+------+------+------+------+
|
1 | aa
|
1 | aa
|
+------+------+------+------+
1 row in set (Elapsed: 00:00:04.23)
示例3:后面的CTE 引用前面的CTE
gbase> with tt1 as(select a,b from t),tt2 as(select a+10 as ab from tt1) select *
from tt2;
+------+
| ab
|
+------+
|
11 |
+------+
1 row in set (Elapsed: 00:00:00.54)
示例4:一次定义,多次使用
gbase> with tt as(select a,b from t) select * from tt tt1 join tt tt2 on tt1.a=tt2.a;
+------+------+------+------+
| a
| b
| a
| b
|
+------+------+------+------+
|
1 | aa
|
1 | aa
|
+------+------+------+------+
1 row in set (Elapsed: 00:00:02.86)
示例5:union 场景,只支持“全局”的CTE
gbase> with tt as(select a,b from t) select * from tt where a>1 union select *
from tt where a<1;
+------+------+
| a
| b
|
+------+------+
|
2 | bbb
|
|
-1 | ccc
|
+------+------+
4
rows in set (Elapsed: 00:00:01.01)
示例6:insert…select 中select 部分使用CTE
gbase> insert into t(a,b) with tt as (select a,b from t) select a,b from tt;
Query OK, 3 rows affected (Elapsed: 00:00:01.29)
Records: 3
Duplicates: 0
Warnings: 0
示例7:create…select 中的select 部分使用CTE

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1104
gbase> create table abc as with tt as(select a,b from t) select a,b from tt;
Query OK, 6 rows affected (Elapsed: 00:00:05.91)
示例8:子查询中定义CTE
gbase> with base as (select * from t) select * from (with t1 as (select * from
base) select * from t1) t where a in (select a from t);
+------+------+
| a
| b
|
+------+------+
|
1 | aa
|
|
2 | bbb
|
|
-1 | ccc
|
|
1 | aa
|
|
2 | bbb
|
|
-1 | ccc
|
+------+------+
6 rows in set (Elapsed: 00:00:02.70)

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1105
注意

增加参数_t_gcluster_support_cte 控制gcluster 是否支持cte 语法。
该参数为session 级参数,
默认值为0 表示不支持,
值设置为1 时支持CTE
语法。

子查询中with as 声明的alias 为全局的,不支持子查询中标识符的范围控
制,子查询中的with as 可在全局范围内顺序引用且共用同一名称空间。
按定义顺序,后面的with as 定义可以引用前面的with as 定义。
with tt as (select * from t1) select * from (with tt as (select * from t1) select *
from tt limit 10) aa;
ERROR 1066 (42000): Not unique table/alias: 'tt'

CTE 定义的select 语句中支持使用grouped hint。如
gccli -c -q
use vc vc2023;
use testdb;
set _t_gcluster_support_cte=1;
with tt as(select /*+ grouped('1') */ a,b from t1) select * from tt join t2 on
tt.a=t2.a;

不支持存储过程、函数、视图定义中使用包含有CTE 的查询语句。

不支持嵌套定义CTE。如:
with abcd as (with tt as (select 1 from t1) select * from tt) select * from abcd;
ERROR 1149 (42000): You have an error in your SQL syntax; check the
manual that corresponds to your GBase server version for the right syntax to
use

当设置了如下参数后,CTE 中含有开窗函数时,会通过解析,但是执行结
果不正确
_t_gcluster_support_cte=1
_t_gbase_new_window_function_support=1

IFX_DIRECTIVES 环境变量设置确定优化器是否允许来自查询内的查询优化伪指
令。IFX_DIRECTIVES 环境变量是在客户机上设置的。
可指定 ON 和 OFF 或 1 和 0 来设置环境变量。

1 接受优化器伪指令
0 不接受优化器伪指令
IFX_DIRECTIVES 环境变量的设置会覆盖为数据库服务器设置的 DIRECTIVES 配
置参数的值。但是,如果未设置 IFX_DIRECTIVES 环境变量,那么所有客户机会话将
继承 ONCONFIG 参数 DIRECTIVES 确定的伪指令的数据库服务器配置。
IFX_DIRECTIVES 环境变量的缺省设置为 ON。
有关 DIRECTIVES 参数的更多信息,请参阅《GBase 8s 管理员参考》。有关伪指令
对性能影响的更多信息,请参阅《GBase 8s 性能指南》。