如果绝大部分列的分隔符都是同样的,load table命令可以采用更简洁一些的第二种写法:
Load TABLE 表名 ( 第一个列名, 第二个列名,… 最后一个列名) FROM 文件名 选项ROW DELIMITED BY '\n' DELIMITED BY ','。
这里将分隔符统一指定,如果某些列有特殊的分隔符,再单独指出即可。例如下面的导入命令表示最后一列分隔符是空格,其它分隔符都是默认的','。
批量数据导出的办法有2种,第一种采用输出重定向,语法是在查询语句后面加># 文件名,注意文件名不能用引号括起。
id v1 v2
----------------------------------
1 2 3
1 1 3
2 1 4
2 2 5
(4 行)
执行时间: 0.022 秒
正在将数据导出到 "/user1/app/t2a.txt"
4 行已写入 "/user1/app/t2a.txt"
我们看到屏幕输出的同时产生了输出文件,输出文件内容如下:
'1',2,3
'1',1,3
'2',1,4
'2',2,5
第二种称为数据提取选项,采用设置临时外部文件名和select语句配合的办法完成,举例如下:
执行时间: 0.002 秒
(DBA)> SET TEMPORARY OPTION Temp_Extract_Name2 = ''; -- 表示不导出多个文件
执行时间: 0.001 秒
(DBA)> SELECT * from t2;
id v1 v2
----------------------------------
(0 行)
执行时间: 0.027 秒
(DBA)> SET TEMPORARY OPTION Temp_Extract_Name1 = ''; -- 导出完成后重置临时外部文件为空
执行时间: 0.002 秒
[root@redflag11012601 app]# cat /user1/app/t2.txt
1,2,3,
1,1,3,
2,1,4,
2,2,5,
我们看到屏幕输出为0行,而在操作系统上产生了导出文本文件,导出的字符类型列默认没有单引号分隔符,而最后一列后面带有列分隔符。对于大型结果集,SybaseIQ建议采用数据提取来提高输出速度,数据提取的其它详细设置内容请参考用户手册。
(三)SQL语句的功能特点
Sybase IQ支持分区和索引、主键、外键等,还支持不同分区使用不同的数据库空间。支持分析函数和group by的rollup、cube扩展。这在我们见过的列存储数据库中是对SQL标准支持最完备的,为数据分析应用打下了良好的基础。这里分别举例说明。
1. 创建分区表,不同分区指定不同的数据库空间。
我们插入一些id小于'12'的数据,可以观察到数据库空间iq_main的使用率上升。
DBSpaceName Usage TotalSize Reserve NumFiles NumRWFiles Stripingon StripeSize
----------------------------------------------------------------------------------
iq_main 77 275M 0B 1 1 T 1K
(DBA)> insert into tp2(id) select substr(id,1,10) from rk.hu1 where id<='12';
已插入 4417045 行
执行时间: 3.301 秒
(DBA)> commit;
执行时间: 0.013 秒
(DBA)> sp_iqdbspace ('IQ_MAIN')
DBSpaceName Usage TotalSize Reserve NumFiles NumRWFiles Stripingon StripeSize
----------------------------------------------------------------------------------
iq_main 80 275M 0B 1 1 T 1K
而其他的数据库空间没有变化。