南大通用GBase8s 常用SQL语句(四十二)

南大通用GBase8s 常用SQL语句(四十二)
以 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 加载事务完成。
使用相同的结构将定界文件中的数据加载到数据库表中
如果外部表与数据库表具有相同的结构,则可以不用定义外部表的结构。
考虑将定界 ASCII 文本文件加载到具有以下结构的表中:
TABLE employee (
name CHAR(18) NOT NULL,
hiredate DATE DEFAULT TODAY,
address VARCHAR(40),
empno INTEGER);
以下 SQL 语句可以用来将数据加载到 employee 表中:
CREATE EXTERNAL TABLE emp_ext
SAMEAS employee
USING (
DATAFILES (“DISK:/work2/mydir/emp.dat”),
REJECTFILE “/work2/mydir/emp.rej”
);
INSERT INTO employee SELECT * FROM emp_ext;
外部表的每一列具有与源表列相同的名称、类型和缺省值,因为 CREATE 语句包含了 SAMEAS 关键字。缺省格式为定界,因此不需要格式关键字。
定界文件缺省为 ASCII 。除非您在创建外部表时使用 RECORDEND 关键字定义不同的定界符,否则缺省的行定界符是行结束符。(RECORDEND 关键字仅对定界格式有效。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值