返回首页

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

更新日期:2024年09月11日

node (192.168.146.40)
check table topology begin

当遇到多表关联的时候,
尤其是主表外连接多个右表,
其中关联字段为右表的hash
键的时候,
这时候为防止破坏hash 分布计算,
可根据右表数据量的大小将其创建
为复制表。
举例:
SELECT
..
..
FROM rep.statcmain
a
-- 80989472
hash 列policyno
INNER JOIN rep.statdcompanylevel d
--25887
replicate
ON
a.comcode = d.comcode
LEFT JOIN rep.statdagent
l
--86485
replicate
ON a.agentcode = l.agentcode
LEFT JOIN rep.temp_prpcengagenew
pr
--164205
hash 列policyno
ON a.policyno = prpcengagenew.policyno
LEFT JOIN rep.statdcarmodel
b
--178758 replicate
ON a.modelcode = b.modelcode
LEFT JOIN rep_dev.odsbi_prpmotorcade i
--288949 replicate
ON a.contractno = i.contractno
LEFT JOIN ..
其中,主表rep.statcmain 数据量80989472 ,hash 列policyno ,但外连接表
rep.statdcompanylevel,
rep.statdagent,
rep.statdcarmodel,
rep_dev.odsbi_prpmotorcade
的关联字段为非hash 键,将这些表创建为复制表,可以防止拉表做到一步下发。

GBase UP 支持修改Oracle 引擎的表格,
在本章节介绍通过GBase UP 来修改Oracle
引擎的表。
语法格式

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 745
ALTER TABLE [db_name.]table_name
RENAME TO new_table_name
| [
COMPRESS
[
BASIC
|FOR OLTP|QUERY [LOW|HIGH]|ARCHIVE
]
|NOCOMPRESS
]
| [NOPARALLEL|PARALLEL [integer]]
| LOGGING
| NOLOGGING
| FILESYSTEM_LIKE_LOGGING
| PCTFREE integer
| PCTUSED integer
| INITRANS integer
| STORAGE(FREELISTS integer | FREELIST GROUPS integer, …)
| ADD [(] col_name1 datatype, col_name2 datatype… [)]
| SET UNUSED COLUMN col_name
| SET UNUSED (col_name1, col_name2…)
| DROP COLUMN col_name
| DROP (col_name1, col_name2…)
| DROP UNUSED COLUMNS
| DROP COLUMNS CONTINUE
| MOVE
参数说明

db_name:被修改的表所在的数据库名。该参数为可选参数,指定数据库后,
在此数据库下修改表。
如果没有显示指定db_name 参数,
修改的表隶属于USE
db_name 后的数据。

table_name:被修改的表名称。默认情况下,在当前数据库中修改表。如果没
有指定当前数据库或表不存在,则报告错误信息。

new_table_name:如果是改名操作,这是新的表名称。

COMPRESS: 使用表压缩来节省空间并提高查询性能。

[NOPARALLEL|PARALLEL [integer]]:是否采用并行操作。

LOGGING:指定表的创建将记录到重做日志文件中。它还指定所有针对该表
的后续操作都将被记录下来。这是缺省设置。

NOLOGGING:指定表的创建将不被记录到重做日志文件中。

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 746

FILESYSTEM_LIKE_LOGGING:只记录元数据,在出现故障后仍然允许段的
恢复。

PCTFREE integer:
为了行长度增长而在每个块中保留的空间的量
(以占整个空
间减去块头部后所剩余空间的百分比形式表示),当剩余空间不足pctfree 时,
不再向该块中增加新行。如果空间太小,在更新数据时容易发生行迁移。

PCTUSED integer:在块剩余空间不足pctfree 后,块已使用空间百分比必须小
于pctused 后,才能向该块中增加新行。

INITRANS integer:在块中预先分配的事务项数,INITRANS 对数据段的缺省
值为1,对索引段的缺省值为2,以保证最低程度的并发。当事务访问表中的
一个数据块时,
该事务会在Oracle 块的头部中记录一个值,
用于标记该事务正
在使用这个oracle 块。该事务结束时,会删除对应的条目。

STORAGE(FREELISTS integer | FREELIST GROUPS integer, …):在字典管理
方式的表空间中,Oracle 使用free list 来管理未分配的存储块。 Oracle 记录了
有空闲空间的块用于insert 或Update。

ADD [(] col_name1 datatype, col_name2 datatype… [)]:往数据表中增加新列。
SET UNUSED 标记一列或者多列不可用。

DROP COLUMN col_name:删除数据表中的列

DROP (col_name1, col_name2…):删除数据表中多列。

DROP UNUSED COLUMNS:删除被被标记为不可用的列DROP COLUMNS
CONTINUE:出现异常后继续执行drop 命令

MOVE:把表格最多收缩到创建表格时的storage 子句指定的初始大小。
示例
示例1:向数据表中新增列信息。

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 747
gbase>desc t_oracle;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
1 row in set (Elapsed: 00:00:00.00)
gbase> alter table t_oracle add info varchar2(100);
Query OK (Elapsed: 00:00:00.17)
gbase>desc t_oracle;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| info |varchar(100) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
2 rows in set (Elapsed: 00:00:00.01)
示例2:删除数据表中某列信息
gbase> alter table t_oracle drop column info;
Query OK (Elapsed: 00:00:00.95)
gbase>desc t_oracle;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
1 row in set (Elapsed: 00:00:00.00)