返回首页

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

更新日期:2024年09月11日

取值:[0|1|2]
默认值:2
说明:集群hash 重分布的优化开关
0 拉复制表
1 强制重分布,即在两个分布表进行等值JOIN 运算时,将把其中一个表的数据
根据连接条件列的值进行哈希重分布。然后,利用各个运算节点上重分布后的临
时表和另一个进行JOIN 运算。这样,各节点的运算结果直接汇总即可得到最终
结果。这种策略可以免于将其中一个分布表在所有运算节点上拉成复制表,而是
每个运算节点只需接收这个表的一部分数据。
2 评估优化,两表的尺寸相差不超过20% 时,使用哈希重分布JOIN;否则不使
用。
该参数的默认值是2。
修改方式:
可使用set 语句修改值也可在配置文件中修改值。
适用于session、
global
范围均可。

站中设置的监控项的单位。如:cpu 使用率为%。

incvfmtasc() 函数使用格式化掩码来将字符串转换为 interval 值。

语法
mint incvfmtasc(inbuf, fmtstring, invvalue)

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 827 -

char *inbuf;
char *fmtstring;
intrvl_t *invvalue;
inbuf
指向包含要转换的字符串的缓冲区的指针。
fmtstring
指向包含要用于 inbuf 字符串的格式化掩码的缓冲区的指针。此时间格式化掩码包含
与 DBTIME 环境变量支持的相同的格式化伪指令。
invvalue
指向初始化了的 interval 变量的指针。

用法

您必须以您想要此变量拥有的限定符来初始化 invvalue 中的 interval 变量。interval
变量不需要指定与该格式化掩码相同的限定符。当 interval 限定符不同于隐含的格式化掩
码限定符时,必要时,incvfmtasc() 将结果转化为恰当的单位。然而,两个限定符都必须属
于同一 interval 类:或为 year to month 类,或为 day to fraction 类。

inbuf 中字符串中的所有字段都必须是相邻的。换句话说,如果限定符为 hour to
second,则您必须为该字符串中某处的 hour、minute 和 second 指定所有值,否则,
incvfmtasc() 返回错误。

inbuf 字符串可有开头和结尾的空格。然而,从第一个有效数字至最后一个,inbuf 仅
可包含适于该格式化掩码暗指的限定符字段的数字和定界符。

如果该字符串是可接受的,则 incvfmtasc() 函数设置 invvalue 中的 interval 值,并
返回零。否则,该函数返回错误代码,且 interval 变量包含不可预料的值。

DBTIME 环境变量接收的格式化伪指令 %B、%b 和 %p 在 fmtstring 中不适用,
因为 month name 和 a.m./p.m. 信息与时间的间隔无关。如果 interval 多于 99 年,则请
使用 %Y 伪指令(%y 仅可处理两位数字)。对于小时,请使用 %H(而不是 %I,因
为 %I 仅可表示 12 小时)。如果 fmtstring 为空字符串,则该函数返回错误。

返回代码

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 828 -

0
转换成功。
<0
转换失败。

示例
demo 目录在文件 incvfmtasc.ec 中包含此样例程序。
/* *incvfmtasc.ec*
The following program illustrates the conversion of two strings to three interval
values.
*/

#include

EXEC SQL include datetime;

main()
{
char out_str[30];
char out_str2[30];
char out_str3[30];
mint x;


EXEC SQL BEGIN DECLARE SECTION;
interval day to minute short_time;
interval minute(5) to second moment;
interval hour to second long_moment;
EXEC SQL END DECLARE SECTION;

printf("INCVFMTASC Sample ESQL Program running.\n\n");

/* Initialize short_time */

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 829 -

printf("Interval value #1 = 20 days, 3 hours, 40 minutes\n");
x = incvfmtasc("20 days, 3 hours, 40 minutes",
"%d days, %H hours, %M minutes", &short_time);

/*Convert the internal format to ascii in ANSI format, for displaying. */
x = intoasc(&short_time, out_str);
printf("Interval value (day to minute) = %s\n", out_str);

/* Initialize moment */
printf("\nInterval value #2 = 428 minutes, 30 seconds\n");
x = incvfmtasc("428 minutes, 30 seconds",
"%M minutes, %S seconds", &moment);

/* Convert the internal format to ascii in ANSI format, for displaying. */
x = intoasc(&moment, out_str2);
printf("Interval value (minute to second) = %s\n", out_str2);

/* Initialize long_moment */
printf("\nInterval value #3 = 428 minutes, 30 seconds\n");
x = incvfmtasc("428 minutes, 30 seconds",
"%M minutes, %S seconds", &long_moment);

/*Convert the internal format to ascii in ANSI format, for displaying. */
x = intoasc(&long_moment, out_str3);
printf("Interval value (hour to second) = %s\n", out_str3);

printf("\nINCVFMTASC Sample Program over.\n\n");
}
输出
INVCFMTASC Sample ESQL Program running.

Interval value #1 = 20 days, 3 hours, 40 minutes
Interval value (day to minute) = 20 03:40

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 830 -


Interval value #2 = 428 minutes, 30 seconds
Interval value (minute to second) = 428:30

Interval value #3 = 428 minute, 30 seconds
Interval value (hour to second) = 7:08:30