返回首页

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

更新日期:2024年09月11日

功能
用于指定读取FTP/HTTP/SFTP 文件的超时时间,如果填充一个数据块(8M)的
时间超过此参数值,加载任务将报错停止。0 表示永不超时。
表6- 72 参数值范围说明表
默认值
最小值
最大值
300
0
UINT_MAX

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

参数说明:标识在prepare 语句中,选择生成执行计划的策略。
该参数属于USERSET 类型参数,请参考表15-1 中对应设置方法进行设置。
取值范围:枚举类型

auto 表示按照默认的方式选择custom plan 或者generic plan。

force_generic_plan 表示强制走generic plan。

force_custom_plan 表示强制走custom plan。
说明:

此参数只对prepare 语句生效,
一般用在prepare 语句中参数化字段存在比较严重的
数据倾斜的场景下。

custom plan 是指对于preapre 语句,在执行execute 的时候,把execute 语句中的参
数嵌套到语句之后生成的计划。custom plan 会根据execute 语句中具体的参数生成
计划,这种方案的优点是每次都按照具体的参数生成优选计划,执行性能比较好;

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
1269
缺点是每次执行前都需要重新生成计划,存在大量的重复的优化器开销。

generic plan 是指对于preapre 语句生成计划,该计划策略会在执行execute 语句的
时候把参数bind 到plan 中,然后执行计划。这种方案的优点是每次执行可以省去
重复的优化器开销;缺点是当bind 参数字段上数据存在倾斜时该计划可能不是最
优的,部分bind 参数场景下执行性能较差。
默认值:auto


GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 313 -
您可将值插入至集合内,而不声明游标。如果该集合为 SET 或 MULTISET,则将该值添
加到集合,但不定义新元素的位置,因为该集合没有特定的顺序。如果该值为 LIST,则您
可将新元素添加在 LIST 中特定的位置,或添加在 LIST 的末尾。
在 manager 表中,direct_reports 列包含 SET 类型的集合,且 projects 列包含 LIST。要将
名称添加到 direct_reports 列中的 SET,请使用带有集合派生的表的 INSERT 语句,如下
图所示。
图: 将值插入至集合。
CREATE PROCEDURE new_emp( emp VARCHAR(30), mgr VARCHAR(30) )

DEFINE r SET(VARCHAR(30) NOT NULL);

SELECT direct_reports INTO r FROM manager
WHERE mgr_name = mgr;

INSERT INTO TABLE (r) VALUES(emp);

UPDATE manager SET direct_reports = r
WHERE mgr_name = mgr;

END PROCEDURE;
此 SPL 过程将员工姓名和管理者姓名作为参数。
然后,
该过程为用户已输入了的管理者选
择 direct_reports 列中的集合,
添加用户已输入了的员工名称,
并以新集合更新 manager 表。
前图中的 INSERT 语句将用户提供的新的员工姓名插入至在集合变量 r 中包含的 SET 内。
然后,UPDATE 语句将新集合存储在 manager 表中。
请注意 VALUES 子句的语法。将文字的数据和变量插入至集合变量内的语法规则如下:

使用 VALUES 关键字之后的圆括号来括起值的完整列表。

如果该集合为 SET、
MULTISET 或 LIST,
则请使用后跟方括号的类型构造函数来
将要插入的值的列表括起来。此外,必须将集合值括在引号中。
VALUES( "SET{ 1,4,8,9 }" )

如果该集合包含 row 类型,请使用后跟圆括号的 ROW 来将要插入的值的列表括
起来:
VALUES( ROW( 'Waters', 'voyager_project' ) )

如果该集合为嵌套的集合,则根据定义数据类型的方式,嵌套关键字、圆括号和方
括号:
VALUES( "SET{ ROW('Waters', 'voyager_project'),

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 314 -
ROW('Adams', 'horizon_project') }")
要获取关于将值插入至集合的信息,请参阅 修改数据。

插入至嵌套的集合内
如果您想要插入至嵌套的集合内,则 VALUES 子句的语法有变化。例如,假设您想要将
值插入至 图 1 展示的 numbers 表的 twin_primes 列内。
对于 twin_primes 列,您可能想要将 SET 插入至 LIST,或将元素插入至内层的 SET。下
列部分描述每一任务。
将集合插入至外层的集合内
将 SET 插入至 LIST 内,类似于将单个值插入至简单的集合内。
要将 SET 插入至 LIST 内,请声明集合变量来保存该 LIST,并将整个集合选择至它内。
当您使用集合变量作为集合派生的表时,
该 LIST 中的每一 SET 成为该表的一行。
然后,
您可将另一 SET 插入在该 LIST 的末尾或插入在指定的点。
例如,一个数值行的 twin_primes 列可能包含下列 LIST,如下图所示。
图: 样例 LIST。
LIST( SET{3,5}, SET{5,7}, SET{11,13} )
如果您将 LIST 视为集合派生的表,则它看上去可能像这样。
图: 将 LIST 视为集合派生的表。
{3,5}
{5,7}
{11,13}
您可能想要插入值 "SET{17,19}" 作为 LIST 中的第二项。下图中的语句展示如何执行。
图: 将值插入到 LIST 中。
CREATE PROCEDURE add_set()

DEFINE l_var LIST( SET( INTEGER NOT NULL ) NOT NULL );

SELECT twin_primes INTO l_var FROM numbers
WHERE id = 100;

INSERT AT 2 INTO TABLE (l_var) VALUES( "SET{17,19}" );

UPDATE numbers SET twin_primes = l
WHERE id = 100;

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 315 -

END PROCEDURE;
在 INSERT 语句中,
VALUES 子句将值 SET {17,19} 插入在 LIST 的第二个位置。
现在,
该 LIST 看上去像下图这样。
图: LIST 项。
{3,5}
{17,19}
{5,7}
{11,13}
通过将 SET 作为参数传到 SPL 例程,您可执行相同的插入,如下图所示。
图: 将 SET 作为参数传到 SPL 例程。
CREATE PROCEDURE add_set( set_var SET(INTEGER NOT NULL),
row_id INTEGER );

DEFINE list_var LIST( SET(INTEGER NOT NULL) NOT NULL );
DEFINE n SMALLINT;

SELECT CARDINALITY(twin_primes) INTO n FROM numbers
WHERE id = row_id;

LET n = n + 1;

SELECT twin_primes INTO list_var FROM numbers
WHERE id = row_id;

INSERT AT n INTO TABLE( list_var ) VALUES( set_var );

UPDATE numbers SET twin_primes = list_var
WHERE id = row_id;

END PROCEDURE;
在 add_set() 中,
用户提供 SET 来添加到 LIST,
以及标识将 SET 插入其中的那行的 id 的
INTEGER 值。
将值插入至内层的集合

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 316 -
在 SPL 例程中,您还可将值插入至嵌套的集合的内层集合。通常,要访问嵌套的集合的内
层集合并将值插入到它,请执行下列步骤:
1.
声明集合变量来在表的一行中保存整个集合。
2.
声明元素变量来保存该外层的集合的一个元素。元素变量本身是集合变量。
3.
将整个集合从表的一行选择至集合变量。
4.
声明游标,以便您可在外层的集合的元素间移动。
5.
一次将一个元素选择至元素变量内。
6.
请使用分支或循环来定位您想要更新的内层集合。
7.
将新值插入至内层的集合内。
8.
关闭游标。
9.
以新的集合更新数据库表。
作为示例,您可在 numbers 的 twin_primes 列上使用此过程。 例如,假设 twin_primes 包含
下图所示的值,且您想要将值 18 插入至 LIST 的最后的 SET 中。
图: twin_primes 列表。
LIST( SET( {3,5}, {5,7}, {11,13}, {17,19} ) )
下图展示插入该值的过程的开始。
图: 插入值的过程。
CREATE PROCEDURE add_int()

DEFINE list_var LIST( SET( INTEGER NOT NULL ) NOT NULL );
DEFINE set_var SET( INTEGER NOT NULL );

SELECT twin_primes INTO list_var FROM numbers
WHERE id = 100;
至此,attaint 过程已执行了步骤 1、2 和 3。第一个 DEFINE 语句声明保存在一个数值行中
的整个集合的集合变量。
第二个 DEFINE 语句声明保存该集合的元素的元素变量。在此情况下,元素变量本身是集
合变量,因为它保存 SET。SELECT 语句将整个集合从一行选择至集合变量 list_var 内。
下图展示如何声明游标,以便于您可在外层的集合的元素间移动。
图: 声明游标来在外层的集合的元素间移动。
FOREACH list_cursor FOR
SELECT * INTO set_var FROM TABLE( list_var);


GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 317 -
FOREACH element_cursor FOR