返回首页

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

更新日期:2024年09月11日

sysopclasses 系统目录表包含有关与辅助访问方法相关联的运算符类的信息。
它对已在
数据库中定义的每个运算符类包含一行。sysopclasses 表具有以下列。

类型
解释
opclassname
VARCHAR(128)
运算符类的名称
owner
VARCHAR(32)
运算符类所有者的名称
amid
INTEGER
与此运算符类相关联的辅助访问方法的标识
代码
opclassid
SERIAL
运算符类的标识代码
ops
LVARCHAR
属于此运算符类的运算符的名称列表
support
LVARCHAR
对此运算符类定义的支持函数的名称列表

opclassid 值对应于 sysams.am_defopclass 值,
该值为 amid 列指定的辅助访问方法指
定缺省运算符类。
sysopclasses 表具有 opclassname 和 owner 列的组合索引和 opclassid 列的索引。两
个索引都只允许唯一值。

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 51 -

功能
这个参数用于是否控制监听各个gnode 的状态,
以便控制当前执行SQL 来获得该
状态。
参数取值含义说明

参数= 0 禁用监听;

参数= 1 启用监听。
该参数的默认值是1。
表6- 10 参数值范围说明表
默认值
最小值
最大值
1
0
1
使用场景
适用于高可用节点状态响应的场景:
集群查询过程中,由于一些原因某些节点会出现由Online 变为Offline 状态,那
么对应该节点的查询则必须停止下来,执行器在执行过程中会提供高可用节点状
态响应功能,
一旦节点状态变为不可用,
则通知与之相关的查询,
将其停止下来。

GBase 8a MPP Cluster 产品手册
6 附录
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1545



用户定义的聚集
您可以 CREATE AGGREGATE 语句创建您自己的聚集表达式,然后在
您可调用内建的聚集的任何地方调用这些聚集。
下图展示调用用户定义的聚集的语法。
用户定义的聚集

元素
描述
限制
语法
aggregate
要调用的用户定义
的聚集的名称
聚集以及为聚集定义的支持
函数必须存在
标识符
column
table 之内列的名

必须存在且有数值数据类型 引用字符串
setup_expr
为特定的调用定制
聚集的设置表达式
不可为孤立的主变量。在
setup_expr 中引用的任何
列都必须在该查询的 GROUP
BY 子句中
表达式
synonym、
table、view
column 在其中发生
的同义词、表或视

synonym 和它指向的表或视
图必须存在
标识符

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1530
使用 DISTINCT 或 UNIQUE 关键字来指定仅将用户定义的聚集应用于命名的列
或表达式中唯一的值。使用 ALL 关键字来指定将该聚集应用于命名的列或表达
式中所有的值。
如果您省略 DISTINCT、UNIQUE 和 ALL 关键字,则缺省值为 ALL。要获取关
于 DISTINCT、UNIQUE 和 ALL 关键字的更多信息,请参阅 包括或排除结果
集中的重复值。
当您指定设置表达式时,将此值传递到 INIT 支持函数,在 CREATE
AGGREGATE 语句中为用户定义的聚集定义了该支持函数。
在下列示例中,您将名为 my_avg 的用户定义的聚集应用到 items 表中
quantity 列的所有值:
SELECT my_avg(quantity) FROM items
在下列示例中,您将名为 my_sum 的用户定义的聚集应用于 items 表中
quantity 列的唯一的值。您还支持值 5 作为设置表达式。此值可以指定 my_avg
将计算的总和的初始值为 5。
SELECT my_sum(DISTINCT quantity, 5) FROM items
在下列示例中,您将名为 my_max 的用户定义的聚集应用于远程 items 表中
quantity 列的所有值:
SELECT my_max(remote.quantity) FROM rdb@rserv:items remote
如果将 my_max 聚集定义为 EXECUTEANYWHERE,则可将该分布式查询推送
到远程数据库服务器 rserv 来执行。如果未将 my_max 聚集定义为
EXECUTEANYWHERE,则该分布式查询扫描远程 items 表,并在本地数据库服
务器上计算 my_max 聚集。
您不可以远程数据库服务器的名称来限定用户定义的聚集,如下例所示。在此情
况下,数据库服务器返回错误:
SELECT rdb@rserv:my_max(remote.quantity)
FROM rdb@rserv:items remote
要获取关于用户定义的聚集的更多信息,请参阅 CREATE AGGREGATE 语句 以
及 GBase 8s 用户定义的例程和数据类型开发者指南 中对用户定义的聚集的讨
论。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1531
网格查询中的聚集表达式
网格查询中的聚集表达式要求发出网格查询的数据库服务器从多网格服务器组合
聚集结果。
网格查询是在数据库服务器的限定的行上返回逻辑 UNION 或 UNION ALL 的分
布式 SELECT 语句,这些表在 GBase 8s 网格的数据库中有相同的模式。在
GRID 子句 主题和在 GBase 8s Enterprise Replication 指南 中描述网格查询。
网格查询中的聚集表达式要求发出该网格查询的数据库服务器组合来自多网格服
务器的聚集结果。由于您指定的网格查询转换为跨多网格服务器的 UNION 或
UNION ALL 查询,因此,在指定的网格或区域内在每一参与的服务器上独立地
计算每一聚集。将这些单独的聚集返回到发出该网格查询的数据库服务器,其计
算它们的组合的 UNION 或 UNION ALL 值。
为了从这些单独的聚集计算全局的聚集,该网格查询必须是子查询。例如,假设
我们想要查看东南地区(下列示例中的 SW_USA)的总销售额和平均销售额。因
为如果在该网格内跨数据集的限定的行值的数目不同,则采用平均组的平均值是
不正确的,因此正确的网格查询需要类似这样:
SELECT SUM(amt) AS total_sales ,
SUM(amt) / SUM(cnt) AS avg_sale FROM
(
SELECT COUNT(*) cnt, SUM(amt) amt
FROM sales GRID ALL 'SW_USA'
);

total_sales avg_sale
$8300.00 $103.75
在此示例中,网格查询的 projection 列表指定来自东南地区(编码为
'SW_USA')内每一网格数据库的 sales 表的 COUNT(*) 表达式(别名为 cnt)
和聚集数量 SUM(amt)(别名为 amt)。使用来自每一远程网格服务器的这些
值,本地的网格服务器可计算该地区的平均值。通过把求值表达式 SUM(amt)
的总销售额加起来,并将那个值除以总计数 SUM(cnt) 来实现,此处,cnt 和
amt 是网格子查询的结果集中的列。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1532
请注意,GRID ALL 关键字指定来自每一参与的网格服务器的限定的行的
UNION ALL,来避免消除重复的行。