返回首页

gbase数据、南大通用产品文档:GBase8sifx_lo_specset_estbytes() 函数

更新日期:2024年09月11日

ifx_lo_specset_estbytes() 函数设置智能大对象规范结构中估计的字节数。
语法
ifx_lo_specset_estbytes(lospec, estbytes)
参数
该函数接受以下参数。

GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 169 -
参数
类型
用于
描述
lospec
SQL_INFX_UDT_FIXED
输入
智能大对象规范结构
estbytes
SQL_BIGINT
输入
智能大对象的估计最终值,
以字节
为单位。
此估计值是智能大对象优
化程序的优化提示。
该值不能超过
2 千兆字节。
如果在创建新的智能大对象时,

指定 estbytes 值,
则数据库服务器
从存储特征的继承层次结构中获
取该值。

除非您指定智能大对象的估计大
小,否则不要更改此系统值。如果
您设置了智能大对象的估计大小,
则不要指定的值不要高出智能大
对象的最终大小太多。否则,数据
库服务器可能分配未使用的存储。


使用 SQL_C_LONG 或
SQL_C_SHORT,而不是使用缺省
的 GBase 8s ODBC Driver C 数据
类型 SQL_C_CHAR 作为
estbytes。

用法
ifx_lo_specset_estbytes() 函数设置智能大对象规范结构中估计的字节数。

在您运行估计压缩率的命令之后,数据库服务器显示信息,显示可取得的压缩率的估计,
以及当前取得的压缩率(如果存在的话)。
表 1. estimate_compression 命令显示的信息

显示的信息
est
这是对使用新的压缩字典可取得的压缩率的估计。该估计是与不压缩
对比而节省的空间的百分率。
curr
这是对当前取得的压缩率的估计。这个估计是与不压缩对比而节省的
空间的百分率。对未压缩的分片或表,通常会出现 0.0%。
change
通过切换到新的压缩字典您可取得的压缩率中,这是赢得的百分点
(或可能损失的百分点,
虽然应该很罕见)

这就是 est 与 curr 之
间 的差异。
如果表或分片未压缩,
则您可用该压缩参数创建压缩字典。
如果压
缩分片,则在可压缩之前,您必须执行解压缩或
uncompress_offline 操作。
partnum
这是分片的分区号。
coloff
这个值定义这是对行数据的估计,还是对 dbspace 中的简单大对象
的估计,如下:

-1 表明是对行数据的估计

正数值表明是对分区简单大对象的估计,由该值标识简单大
对象的偏移量。该偏移量是表中的列偏移量,以字节为单位。

table
这是该分片所属的表的全名,格式为 database:owner.tablename
如果您正在估计对索引的压缩收益,则在这列中出现索引的全名。


GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 827 -

示例
下列输出显示如果您重新压缩第一个分片,则可发生节省空间增加 4%。如果压缩未压缩
的第二个分片,则可发生 75.7% 增长。 coloff 列中的值 -1 表明压缩的是行数据。
est curr change partnum coloff table
----- ----- ------ ------------- -----------------------------
75.7% 75.3% +0.4 0x00200003 -1 insurance:bwilson.auto
75.7% 0.0% +75.7 0x00300002 -1 insurance:pchang.home

下列输出显示对行数据(在第一行中)的压缩估计,和对在偏移量 4 和 60 的简单大对象
(在第二和第三行中)的压缩估计。:
est curr change partnum coloff table
----- ----- ------ ------------- --------------------
75.4% 71.5% +3.9 0x00200002 -1 test:mah.table1
5.0% 75.0% +0.0 0x00200002 4 test:mah.table1
75.0% 75.0% +0.0 0x00200002 60 test:mah.table1
对表与分片的压缩估计的输出看上去一样,除了表的数据通常显示表中的所有分片,而分
片的输出仅显示指定分片的信息。

包围符自转义规则
进入转义处理模式条件
前提:通过FIELDS ESCAPED BY '' 强制指定转义符为空,通过
DOUBLE_ENCLOSED BY 关键字指定了字段包围符,且该字段满足使用包围符
的规则。
对字符的转义方法
当进入该转义模式后,如果该字段满足使用包围符的规则(包括正常字段和通过
NULL_VALUE 参数设置的NULL 值),则该字段中所有与包围符相同的字符采
用双写的方式进行转义。如:
CREATE TABLE "aa" ("n" int(11) DEFAULT NULL,
"v" varchar(5)
DEFAULT NULL);
INSERT INTO aa VALUES(10, NULL), (11, ' 数据a'), (NULL, 'bbb'), (12,
'a"b"c');
gbase> select * from aa into outfile '/home/davies/out.txt' fields escaped by ''
terminated by '|' optionally double_enclosed by '"' null_value 'gg"gg';
Query OK, 4 rows affected (Elapsed: 00:00:00.03)
导出的文件为:
$ cat out.txt
10|"gg""gg"
11|"数据a"
gg"gg|"bbb"

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1227
12|"a""b""c"
可见,由于设置了OPTIONALLY 关键字,故非字符串类型数据不需要加包围符,
所以即使该列中存在NULL 值,也通过NULL_VALUE 设置了非空NULL 值,也
不会对该数据中的包围符双写转义;仅仅会对需要加包围符的字段采用双写的方
式转义。