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

使用相同的结构将定界文件中的数据加载到数据库表中
如果外部表与数据库表具有相同的结构,则可以不用定义外部表的结构。
考虑将定界 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 关键字仅对定界格式有效。)
从固定文本文件加载
固定文本文件是一种数据驻留在文件中固定位置的文件。
以下 SQL 语句将 emp_exp 外部表中的数据加载到固定位置表(employee):
CREATE EXTERNAL TABLE emp_ext
( name CHAR(18) EXTERNAL CHAR(18),
hiredate DATE EXTERNAL CHAR(10),
address VARCHAR(40) EXTERNAL CHAR(40),
empno INTEGER EXTERNAL CHAR(6) )
USING (
FORMAT ‘FIXED’,
DATAFILES (“DISK:/work2/mydir/emp.fix”)
);
INSERT INTO employee SELECT * FROM emp_ext;
枚举的列使用 EXTERNAL 关键字描述在外部文件中存储数据的格式。
在拥有相同结构的表之间加载数据
如果表具有相同的结构,则您能轻松地将外部表的数据移动到数据库表。
您可以使用简单的 INSERT 语句将一个表的数据加载到另一个具有相同结构的表中(例如:worldemp)。
INSERT INTO worldemp SELECT * FROM emp_ext;
将值装入 Serial 列
您可以在在 Serial 列中插入连续数字或显式值。
数据库服务器将使用原始数据文件中的值或数据库服务器自动生成的值装入到 Serial 列。
如果您希望该 serial 列值为来自数据文件的值,那么 INSERT 语句不需要进行 special 处理。如果您希望数据库服务器自动生成该值,那么忽略来自 INSERT 语句的 serial 列。例如:在表 col1 中第一列是 serial 列,使用以下语句,缺省机制提供 serial 值:
INSERT INTO mytable (col2, …) SELECT …
如果该表被装入到多个分区,则 serial 值的以与表分片相同的顺序递增。
加载数据仓库表
对数据仓库应用程序,您可以使用外部表加载每一个大表。
本节讨论加载非常大的表的各种场景:
最初加载
定期刷新
从数据库服务而不是 GBase 8s 加载 OLTP 数据
最初加载
以下场景使用外部表创建并加载一个数据仓库表。
最初加载表
1.创建 RAW 类型的表以便从轻量级追加中获利并避免在加载期间日志记录的开销。
CREATE RAW TABLE tab1 …
2.对数据库服务器使用 CREATE EXTERNAL TABLE 语句描述外部数据文件,在 USING 子句中指定 EXPRESS 语句。
3.加载该表。
INSERT INTO tab1 SELECT * FROM ext_tab
该表加载很快,并且该操作用了非常小的日志空间。
4.验证数据的完整性。
5.在该表上创建索引以致于查询运行更快。
6.如果必要,执行零级备份以便您之后可以恢复该表。如果在有问题的情况下,从原始源重新加载表也很容易的话,则不需要执行此零级备份。
定期刷新
该场景定期从其它源加载新数据到数据仓库表。
该场景假设在正常操作期间该表的类型是 STANDARD ,之前执行过 CREATE EXTERNAL TABLE 语句,并且在 USING 子句中指定了 EXPRESS 关键字。
要定期刷新表
1.删除表上所有的索引。
2.更改表类型为 RAW。
ALTER TABLE tab1 TYPE(RAW);
3.向表加载新数据。
INSERT INTO tab1 SELECT * FROM ext_tab
此 insert 语句很快在该表的末尾追加了新数据,且该操作用了很小的日志空间。
4.验证数据的完整性。
5.更改表类型为 STANDARD 。
ALTER TABLE tab1 TYPE(STANDARD);
6.重新创建表上的索引以致于查询运行更快。
7.如果必要,执行零级备份以便您之后可以恢复该表。如果在有问题的情况下,从原始源重新加载表也很容易的话,则不需要执行此零级备份。
从其它数据库服务器初始加载 OLTP 数据
该场景是首次加载数据到 GBase 8s 中,当您从另一个数据库服务迁移是,您可能会执行此操作。
在此场景。要加载的表将被用于 OLTP,因此您需要日志记录事务、回滚和恢复能力。
使用 CREATE EXTERNAL TABLE 语句从不同的数据服务器使用最初加载 OLTP 数据:
1.创建 RAW 类型的表以便从轻量级追加中获利并避免在加载期间日志记录的开销。
CREATE RAW TABLE tab1 …
2.对数据库服务器使用 CREATE EXTERNAL TABLE 语句描述外部数据文件,在 USING 子句中指定 EXPRESS 语句。
3.加载该表。
INSERT INTO tab1 SELECT * FROM ext_tab
该表加载很快,并且该操作用了非常小的日志空间。
4.验证数据的完整性。
5.执行零级备份,提供一个恢复点。
6.更改表的类型为 STANDARD。
ALTER TABLE tab1 TYPE(STANDARD);
7.在表上创建的索引以便查询运行更快。
8.启用表上的约束以保留数据的完整性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值