IQ 16.0 SP02之前,LOAD TABLE语句从文本文件中装载数据,文本文件不能是压缩的格式。如果文本文件中包含很多记录的时候,文件会比较大,占用的文件系统空间也多。此外,从IQ 15起支持客户端装载,未压缩的文本文件放在客户端的文件系统中,需要通过网络传递给IQ Server,这样导致网络传递时间长。
IQ 16.0 SP02起,LOAD TABLE支持从.gzip和.gz文件中直接装载数据,IQ在处理时会自动把.gzip和.gz后缀的文件当成压缩文件,完成解压和数据读取处理。下面结合一个例子,说明具体的用法。
1. 示例数据库
示例使用iq 16自带的demo数据库。构建demo数据库的脚本是$IQDIR16/demo/mkiqdemo.sh,执行它既可创建。
我们使用employees表,该表对应的数据文件为$IQDIR16/demo/demodata/employee.dat
2. 创建表
执行如下语句创建employees_1做为load table的目标表
select * into employees_1 from employees where 1=2
3. 编写load table脚本load_test.sql
LOAD TABLE employees_1
(
EmployeeID '|!' ,
ManagerID '|!' ,
Surname '|!' ,
GivenName '|!' ,
DepartmentID '|!' ,
Street '|!' ,
City '|!' ,
State '|!' ,
Country '|!' ,
PostalCode '|!' ,
Phone '|!' ,
Status '|!' ,
SocialSecurityNumber '|!' ,
Salary '|!' ,
StartDate '|!' ,
TerminationDate '|!' ,
BirthDate '|!' ,
BenefitHealthInsurance '|!' ,
BenefitLifeInsurance '|!' ,
BenefitDayCare '|!' ,
Sex '|!'
)
FROM '/tmp/employee.dat.gz'
FORMAT ASCII
ESCAPES OFF
QUOTES OFF
NOTIFY 500000
ROW DELIMITED BY '\x0a'
WITH CHECKPOINT ON;
COMMIT;
4. 准备压缩格式数据文件
使用IQ Server端export方法,把demo库中的employees表的数据导出到数据文件/tmp/employee.dat中. 脚本(export_test.sql)如下:
set temporary option temp_extract_row_delimiter = '\x0a';
set temporary option temp_extract_column_delimiter = '|!';
set temporary option temp_extract_null_as_empty = 'ON';
set temporary option temp_extract_append = 'OFF';
set temporary option temp_extract_binary = 'OFF';
set temporary option temp_extract_swap = 'OFF';
set temporary option temp_extract_name1 = '/tmp/employee.dat';
select * from employees;
set temporary option temp_extract_name1 = '';
使用dbisql执行export_test.sql 生成数据文件:dbisql -c "uid=DBA;pwd=sql" -nogui export_test.sql
gzip employee.dat #压缩成功后,会形成employee.dat.gz压缩文件.
cp employee.gz /tmp
5. 使用dbisql执行load table语句
dbisql -c "uid=DBA;pwd=sql" -nogui load_test.sql
阅读(2746) | 评论(0) | 转发(0) |