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

南大通用GBase8s 常用SQL语句(四十三)
从固定文本文件加载
固定文本文件是一种数据驻留在文件中固定位置的文件。
以下 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.启用表上的约束以保留数据的完整性。
将数据从 GBase 8s 卸装到外部表
通过创建外部表并将数据插入到该表中,或者从内部表查询数据并将数据插入到外部文件,来卸装数据。
要并行地卸装数据,启动并行运行的查询,并将其输出结果写到多个文件中。该卸装任务使用循环技术均衡输出文件汇总的行数。
卸载到定界文件
您可以将表中的数据卸载到定界的 ASCII 文本文件中,如下所示:
CREATE EXTERNAL TABLE emp_ext
SAMEAS employee
USING (
DATAFILES (“DISK:/work2/mydir/emp.dat”)
);
INSERT INTO emp_ext SELECT * FROM employee;
定界文件缺省为 ASCII 。
卸载到 GBase 8s 数据文件
要将 employee 表卸载到 GBase 8s 内部格式的表,请使用类似的下列语句:
SELECT * FROM employee
WHERE hiredate > “1/1/1996”
INTO EXTERNAL emp_ext
USING (
FORMAT ‘GBASEDBT’,
DATAFILES (“DISK:/work2/mydir/emp.dat”)
);
因为输出文件使用 GBase 8s 内部表示法,所以您需要在 USING 子句中指定 FORMAT ‘GBASEDBT’ 选项。(缺省为定界 ASCII 格式。)
卸载到固定文本文件
可将数据库的数据卸载到固定格式文件。
以下 SQL 语句将以固定文本格式的 employee 表卸载到 emp_ext 外部表中:
CREATE EXTERNAL TABLE emp_ext
( name CHAR(18) EXTERNAL CHAR(20),
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 emp_ext SELECT * FROM employee;
这些语句创建了有 20 个字符位置的第一个字段,10 个字符位置的第二字段等等的固定文本文件。因为通过 SELECT 语句选择行,所以您可以任何您希望的方式格式化该 SELECT 列表。
向固定文本文件添加行结束符
您可以向固定文本文件的每行添加行结束符,以将文件用于其它应用程序。
如果您以固定文本格式写文本,一行写一个记录是有帮助的。行结束符使得数据更清晰易读。如果您使用缺省的定界格式,则会自动添加行结束符。然而,对于固定格式卸载,需要在您的记录中添加行结束符。例如:考虑具有以下结构的表:
TABLE sample (
lastname CHAR(10),
firstname CHAR(10),
dateofbirth DATE);
该表包含以下值:
Adams Sam 10-02-1957
Smith John 01-01-1920
接下来,考虑以下结构的外部表:
CREATE EXTERNAL TABLE sample_ext (
lastname CHAR(10) EXTERNAL CHAR(10),
firstname CHAR(10) EXTERNAL CHAR(10),
dateofbirth DATE EXTERNAL CHAR(12));
不带行结束符卸载 sample_ext 会产生以下输出:
Adams Sam 10-02-1957 Smith John 01-01-1920
您可以通过使用程序或脚本添加行结束符,或者在 SELECT 语句中添加换行字段。
使用程序或脚本
要添加行结束符,您可以将固定长度的记录写到数据文件中,然后用程序或脚本修改该数据文件。
例如:您可以用 C 程序查找每一记录的长度,定位每一行的末尾,然后添加行结束符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值