将外部表中的加载到 GBase 8s
要加载数据,请定义该外部数据为外部表然后将数据插入到数据库中。
数据库服务器执行 express 方式加载和 deluxe 方式加载。您只能当表类型是 RAW 且不拥有活动的索引时,才能执行 express 方式加载。数据库服务器对这两种加载方式都允许约束检查。
Express 方式在加载期间提供最高的性能。
Deluxe 方式将快速并行加载和索引及唯一约束的评估结合,并且在以下情况中,更有效率:
对于您正在加载的数据量,重建索引的开销太高。
您想要使用从您正在加载表中的已删除行的空的空间。
如果接收外部表的行的表是 STANDARD 表(即,不是由 CREATE TEMP TABLE 或 CREATE RAW TABLE 语句创建的数据库表),则 EXPRESS 关键字没有作用,且该表以 DELUXE 方式加载。当数据库服务器忽略加载操作中的 EXPRESS 关键字时(此处正在接收数据的表不是 RAW 表),它不会发出异常。
以 Express 方式加载数据
Express® 方式支持数据快递加载到没有索引的表中。在日志记录的数据库中,只有 RAW 表能使用此方式。
警告: 支持事务日志记录的数据库中的 STANDARD 表不允许 Express 方式加载。
注:
Express 方式加载使用轻量级追加,它绕过缓冲池。轻量级追加消除与缓冲管理器相关的开销但不日志记录数据。在 express 方式,数据库服务器会自动排他锁定该表。其它用户不能存取该表。
无论您是否使用DELUXE 关键字,数据库服务器使用 express 方式,除非目标表有索引或者目标表是 STANDARD 表。
如果您定义了 RAW 类型表并在加载数据后没有定义任何索引,则可以对此没有数据的新建的表使用 express 方式。如果您不希望在支持事务日志记录的数据库中使用,请选择 RAW 表。
要为现有的表准备 express 方式加载,请删除所有的索引,并确保表类型是 RAW 。
从外部表加载数据到 raw 表不会被日志记录;因此,您必须在删除数据库之前执行零级备份。如果您在执行零级备份之前尝试删除数据库,则数据库服务器发出 ISAM 错误error -197,如下所示:
Partition recently appended to; can’t open for write or logging
考虑具有以下结构的表:
TABLE employee (
name CHAR(18),
hiredate DATE,
address CHAR(40),
empno INTEGER);
在现有表上使用 express 方式加载
1.更改表类型从而允许快速加载。
ALTER TABLE employee TYPE (RAW);
2.创建外部表描述。
CREATE EXTERNAL TABLE emp_ext
SAMEAS employee
USING (
FORMAT ‘DELIMITED’,
DATAFILES
(“DISK:/work2/mydir/emp.dat”),
REJECTFILE “/work2/mydir/emp.rej”,
EXPRESS
);
3.加载该表。
INSERT INTO employee SELECT * FROM emp_ext;
如果数据库服务器选择 express 方式,当目标表包含索引、约束或者任意其它问题条件时,加载停止并发出错误消息。
4.创建零级备份。
因为数据是未日志记录的,您必须执行零级备份以允许数据复原。如果磁盘失败,则您无法自动恢复数据。需要使用最近的零级备份文件。
如果表类型是 RAW (未日志记录),则忽略 BEGIN WORK 和 COMMIT WORK 语句。
注: 如果您删除表中的很多行,然后以 EXPRESS 方式向表加载很多新行,则该表大小增加,因为轻量级追加在表的末尾插入行,并且它不拒绝表内的空白。(不管您是否指定 EXPRESS 方式,如果表由很多已删除的行,则该加载可能选择 DELUXE 方式填充到该空间。)
以 DELUXE 方式加载数据
DELUXE 方式将快速并行加载与索引评估和唯一约束评估结合起来。数据库服务器对所有数据库中的被索引的目标表和在日志记录的数据库中 STANDARD 目标表的选择这种方式。
注:
DELUXE 方式通常使用单行插入,可以向包含索引的表添加行。在加载期间,该插入修改每行的每个索引。该插入还会检查每一行的约束。DELUXE 方式加载允许您在加载期间将表保持为未锁定的状态,因此其它用户可以继续使用它。
您还可以在不包含索引的表上使用 DELUXE 方式;例如,您希望在加载期间可以完成恢复或持续存取表。
要准备表以 DELUXE 方式加载,请创建内部表的类型为 STANDARD ,并用 DELUXE 关键字创建内部表。
在表上使用 DELUXE 方式加载:
1.如果您希望行锁定,请在 CREATE TABLE 语句中指定行锁定。(缺省情况下时页面锁定。)如果您想要其它用户在加载期间可以读取该表,那么将锁定方式设置为 share 。否则,设置为 exclusive 。
BEGIN WORK;
LOCK TABLE employee IN SHARE MODE;
2.定义外部表。
CREATE EXTERNAL TABLE emp_ext
SAMEAS employee
USING (
DATAFILES (“DISK:/work2/mydir/emp.dat”),
REJECTFILE “/work2/mydir/emp.rej”,
DELUXE
);
3.加载该表。
INSERT INTO employee SELECT * FROM emp_ext;
4.提交该加载,释放行或页面锁定。
COMMIT WORK;
重要: 配置逻辑日志以允许最大并发 DELUXE 加载事务完成。
南大通用GBase8s 常用SQL语句(四十二)
最新推荐文章于 2024-10-31 12:15:00 发布