返回首页

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

更新日期:2024年09月11日

GLOBAL_STATEMENT_COMPLEX_HISTORY_TABL
E
显示各个节点执行作业结束后的负载管理记录。
此数据是从内核中转储到系统表中的数
据。具体的字段请参考GLOBAL_STATEMENT_COMPLEX_HISTORY 中的字段。

在您准备语句之后,您可多次执行它。使用 EXECUTE 语句执行不是 SELECT 语句的那
些语句,以及仅返回一行的 SELECT 语句。
下列 GBase 8s ESQL/C 代码准备并执行银行账户的多语句更新:
EXEC SQL BEGIN DECLARE SECTION;
char bigquery[270] = "begin work;";
EXEC SQL END DECLARE SECTION;
stcat ("update account set balance = balance + ? where ", bigquery);
stcat ("acct_number = ?;', bigquery);
stcat ("update teller set balance = balance + ? where ", bigquery);
stcat ("teller_number = ?;', bigquery);
stcat ("update branch set balance = balance + ? where ", bigquery);
stcat ("branch_number = ?;', bigquery);
stcat ("insert into history values(timestamp, values);", bigquery);

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

EXEC SQL prepare bigq from :bigquery;

EXEC SQL execute bigq using :delta, :acct_number, :delta,
:teller_number, :delta, :branch_number;

EXEC SQL commit work;
EXECUTE 语句的 USING 子句提供主变量的列表,以其值替代准备好的语句中的问号。
如果 SELECT
(或 EXECUTE FUNCTION)
仅返回一行,
则您可使用 EXECUTE 的 INTO
子句来指定接收这些值的主变量。

GBase UP 中,数据是按表存放的,因此数据模型规划阶段需要对数据表的分布策
略进行仔细规划。GBase UP 中的表可以分为如下类别:

复制表:在集群中复制表所在的Distribution 中的每个节点都保存一份全量数
据,再与其它表进行关联查询时可以直接在本节点上完成,无需与其它节点进
行交互,
因此性能最优。
但由于各个节点上数据完全相同,
导致存储空间增加,
因此通常用于小表、维度表或经常需要JOIN 关联的数据表。

分布表:将数据分布存储到不同的节点上。每个节点上存储一部分数据(分片
存储),根据不同应用场景,GBase UP 提供如下两种分布表:

哈希分布表:将表中某列指定为哈希列,然后将数据按照哈希算法的取值
存储到不同的节点上。每个节点上只存储一部分数据。这种存储策略,将
大表数据进行分拆,实现分布式存储。哈希分布表,经常用于对哈希列进
行等值查询的场景,是大型数据中心最常用的数据分布方式。

随机分布表:将数据随机存储到不同的节点上,每个节点只存储一部分数
据,各个节点上的数据量接近。这种数据分布方式,通常用于对数据进行
汇总计算的场景。
例如,在星型模型中,一般将维度表设为复制表,事实表设为分布表(哈希分布
或者随机分布)。在下图ssbm 模型中,lineorder 表设为分布表,其他维度表设
为复制表。
图 2-5 ssbm 星型模型结构图

GBase UP 产品手册 2 产品描述

文档版本04(2021-04-21) 南大通用数据技术股份有限公司 19

对于分布表,还需要考虑数据的高可用,即需要确定备份个数及备份策略,最
多支持备份个数为两个,满足不同的高可用需求。

临时表:当创建表时,使用关键词TEMPORARY。临时表被限制在当前连接
中,当连接关闭时,临时表会自动地删除,这样两个不同的连接可以使用同一
个临时表名而不会发生冲突,也不会与同名现有的表冲突(现有表将被隐藏,
直到临时表被删除)。
可以联合使用REPLICATED 关键字来创建临时复制表;
可以联合使用DISTRIBUTED BY 关键字来创建临时哈希分布表;