一. Unload/load
Unload/load是最常用的简单的数据导入、导出工具,支持的数据格式以固定分隔符(如”|”为默认的分隔符)分隔的文本文件。Unload/load以SQL语句的方式来执行,如在dbaccess中执行,具体语法如下:
1.Unload数据导出
Unload to ‘filename’ [delimiter ‘delimiter’] select statement
复制
其中filename可以是全路径或者相对路径文件名;delimiter可选,默认为“|”;select项为SQL子句,可以是任何形式的SQL语句,这一特征也是unload工具的优势,我们可以利用unload导出任意SQL语句执行的返回结果到文本文件中。
示例如下:
Unload to ‘/tmp/unload.log’ delimiter ‘:’ select * from t1;
复制
2.Load数据导入
Load from ‘filename’ delimiter ‘delimiter’ insert into tablename/synonymname/viewname(column)
复制
示例如下:
Load from ‘/tmp/unload.log’ delimiter ‘:’ insert into t1;
复制
二. Dbload
Dbload拥有容错机制,可以重复导入数据,保持已有数据不变,只增加新增记录;还可以将导入失败的数据记录到指定文件中,帮助用户快速找到有问题的数据。
Dbload的常用命令参数如下:
Dbload [-d dbname] [-c cfilename] [-l logfile] [-n nnum]
-d:数据库名称
-c:命令文件的名称(也叫作控制文件的名称)
-l:保存导入过程中失败的记录
-n:批量提交记录数定义
其中,控制文件的语法为:
FILE filename DELIMITER ‘|’ nfields INSERT INTO tabname [(column) values(f01,f02,…)]
复制
Tabbane
定义导入的目录表,后面的[(column) values]
为可选项,f01为文件的第一列,以此类推。
以下例子为像数据库demodb中的表tab导入数据,命令文件为load_tab.ctl
,日志文件为error.log
,每次检查10000行数据,数据文件为tab.unl
,每行数据有14个字段:
Dbload –d demodb –c load_tab.ctl –l error.log –n 10000
复制
其中控制文件load_tab.ctl的内容为:
File ‘tab.unl’ delimiter ‘|’ 14; Insert into tab;
复制
三.Dbexport/dbimport
在进行数据级别的迁移时,可以采用dbexport
/dbimport
来完成。
- Dbexport
导出数据库中所有对象的模式脚本和表数据文件,在该模式脚本中包含表等的创建脚本,同时包含了导出的表数据文件的信息。
示例如下:
Dbexport dbname –o dirname Dbname:数据库名
复制
-o:指定存储ASCII文件和模式文件的目录名
- Dbimport
根据模式脚本进行导入,在导入过程中首先模式脚本创建对象,导入相应数据的过程类似dbload过程。
示例如下:
Dbimport dbname –i dirname Dbname:数据库名
复制
-i:指定存储ASCII文件和模式文件的目录名,以便dbimport查找
四.扩展表/外部表
外部表就是独立于gbase8s的一个或者多个文件,gbase8s数据库引擎提供对文件的SQL接口访问。通过像外部表插入数据或者从外部表查询数据的方式,实现数据导入导出机制。
1. 创建外部表
Create external table <tabname> <column_options> Using (datafiles (datafiles), <table_options>
复制
Column_options:通常用来定义外部表的字段属性
Datafiles:用来指定external table对应在磁盘上的多个文件或者pipe信息;其中DISK用来指定文件,PIPE用于指定pipe
Table_options:控制属性,如分隔符
示例如下:
Create external table exttab(id int. col int, col1 varchar(20)) using (DATAFILES(“DISK:/tmp/exttab.dat”),delimiter ‘|’);
复制
2. 导出数据
首先要求待导出表的数据格式与对应的外部表一致,通过类似如下语法来导出数据:
Insert into exttab select * from t1;
复制
3. 导入数据
导入数据语法与导出数据语法类型,只是查询表和insert目标表正好相反,如下:
Insert into t1 select * from exttab;
复制