返回首页

gbase数据、南大通用产品文档:GBase8aUDF_INIT 结构

更新日期:2024年09月11日


这个参数被传给所有UDAF 函数,它指向一个UDF_INIT 结构,被用来在函
数之间传递信息;

UDF_INIT 结构成员列在下面。初始化函数应该初始化它想要改变的任何成
员,未初始化的成员变量使用默认值。
typedef struct st_udf_init
{
my_bool maybe_null;
unsigned int decimals;
unsigned long max_length;
char *ptr;
my_bool const_item;
void *extension;
unsigned long *arg_max_lengths;
unsigned long max_buffer_length;
} UDF_INIT;

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1399
unsigned int decimals
指定聚集结果小数点的最大位数,对于返回real、decimal 类型的func 适用。
unsigned int max_length

指定返回结果最大长度,用于create table like/as select 等DML;

对于返回string/decimal 类型的函数如果函数输出超过max_length,
程序行为
见Table 5-3。此表列出了express 引擎的默认行为;

max_length、decimals 在UDAF 返回不同的数据类型时的配置规则,具体参
见下表:
表5- 197 UDAF 返回值类型含义
返回数据类型
类型含义
数据结果表示
max_length
decimals
string
varchar ,date 类
最大字节数
(结果超过
报错)
不生效
decimal
decimal
最大字节数
(结果溢出
报错)
最大小数位
(结果超过
截断)
real
double
(使用缺省)不生效
最大小数位
(结果超过
截断)
integer
bigint
(使用缺省)不生效
不生效

针对udf、udaf,对init 函数中的max_length、decimals 值在init 之后进行合
法性检查。具体规则如下:
表5- 198 合法性检查规则
返回数据类型
UDF/UDAF
String
最大值为65535
最小值为0,不合法时报错
不生效
Decimal
最大值为67(包含小数部分时候,最
大为67,不包含小数部分时,最大为
66),换算成precision 后,最大为65
不合法时报错
最大值为30,不合法时报错
Real
不生效
最大值为31,不合法时报错
Integer
不生效
不生效

上述表格中,除了不生效情况外,其余的情况下都需要在UDF/UDAF 的init
函数里面显示设置max_length 或decimals 的值;如果没有在init 函数

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1400
里面设置的max_length 或decimals,会根据函数的参数进行评估,得到一个
评估的max_length 或decimals 的值,具体见下表:
表5- 199 func 函数返回长度超过max_length 后的处理行为(select 为例)
引擎类别
String
Decimal
Express 引擎
超出后抛异常
超出后抛异常
char *ptr
指向程序为每个分组分配的中间结果buf。
unsigned long *arg_max_lengths
参数占用的最大字节长度,是一个数组,每个参数占用一个。
unsigned long
max_buffer_length
存放聚集中间结果的buf 的最大字节宽度,
用户在func_max_buffer_length 函数中
更新并返回此值。
my_bool
maybe_null
如果func 不返回null,则设置为0,如果后续func 返回了Null 值,则sql 报错退
出,默认为1 。
my_bool const_item
func 始终返回同一个值,则设置为1。
void * extention
UDAF 函数不使用此字段。

特殊配置
检查各服务器上操作系统的型号和版本,
进行相应的额外特殊配置。
该环节动作需要以
root 用户进行操作。

CentOS/RHEL 7.2+操作系统,请参阅CentOS/RHEL 7.2+环境配置。

Kylin V10 操作系统,请参阅Kylin V10 环境配置。

基于Ubuntu 操作系统,请参阅基于Ubuntu 环境配置。

其他操作系统,暂不需要额外配置。
软件检查
步骤1 检查集群各主机hostname。若重名可能导致安装失败。
# 检查hostname
[root@gbase8c ~]# hostname
# 修改hostname
[root@gbase8c ~]# vim /etc/hostname
步骤2 检查bison、flex、patch、bzip2 依赖是否已安装,执行如下命令:
[root@gbase8c ~]# rpm -q bison flex patch bzip2
bison-3.0.4-2.el7.x86_64
flex-2.5.37-6.el7.x86_64
patch-2.7.1-12.el7_7.x86_64
bzip2-1.0.6-13.el7.x86_64
返回如下信息即可。否则下载缺少的软件依赖,如:
[root@gbase8c ~]# yum install -y bison flex patch bzip2
步骤3 虚拟机环境下,检查是否支持rdtscp 指令集,执行如下命令:
[root@gbase8c ~]# cat /proc/cpuinfo | grep rdtscp

GBase 8c V5 安装部署手册(主备式)
南大通用数据技术股份有限公司
9
返回如下信息即可。否则请参考对应CPU 型号官网资料,安装rdtscp 指令集。
flags
: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc
arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3
cx16 sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes hypervisor lahf_lm ssbd
ibrs ibpb stibp tsc_adjust arat spec_ctrl intel_stibp flush_l1d arch_capabilities
……
安装时后台自动进行环境检查。若某项不通过,则返回报错信息提示用户修改;若全部
通过,前台不返回检查信息。

allocate_mem_cost
参数说明:
设置优化器计算Hash Join创建Hash表开辟内存空间所需的开销,
供Hash join
估算不准时调优使用。
该参数属于USERSET 类型参数,请参考表15-1 中对应设置方法进行设置。
取值范围:浮点型,0~DBL_MAX。
默认值:0