使用BCP和LOAD TABLE联合完成Sybase IQ 的数据导出和导入工作。
说明:
表(视图)GN_TEST只有两个字段,TIMEID和MSISDN,
导出时我用'|'作为字段分隔符,'&&&&'作为行分隔符。
1.导出
使用Sybase IQ自带的备份工具bcp导出文件:
bcp [datamark.eastcom.gn_test] out [/srcdata/bcp_export/gn.txt] -c -t"|" -r"&&&&" [-Ueastcom -PEastCom!$ -Sdatamark]
注意:[]号是我加上的,实际使用时要去掉,比如:
bcp datamark.eastcom.gn_test out gn.txt -c -t"|" -r"&&&&" -Ueastcom -PEastCom!$ -Sdatamark
[datamark.eastcom.gn_test]
以.划分为3部分,分别是数据库实例名(datamark)、用户名(eastcom)、和用户下的表名(gn_test,也可以是视图名称)
out
必要参数,该动作指定bcp为导出状态。对应的还有in,表示导入。
[/srcdata/bcp_export/gn.txt]
指定导出的文件,表内导出的数据将放在该文件内。
-c -t"|" -r"&&&&"
-t指定字段分隔符为|,-r指定列分隔符为&&&&
[-Ueastcom -PEastCom!$ -Sdatamark]
-U指定用户
-P输入密码
-S指定数据库
鉴于bcp导入我没研究明白,所以还是建议使用LOAD TABLE作为导入部分。
2.导入
使用LOAD TABLE导入时请参照以下形式
LOAD TABLE GN_TEST ( TIMEID , MSISDN) FROM '/srcdata/bcp_export/gn.txt' format bcp delimited by '|' row delimited by '&&&&' ESCAPES OFF QUOTES OFF WITH CHECKPOINT ON *COMMIT
注意:
from指定本地(即文件与数据库是在同一台设备上)数据文件路径
以上语句中format必须指定bcp。
另,如果导出的时候不指定列分隔符(-r"&&&&"),那么row delimited by '&&&&'可去掉。
默认情况下,bcp导出以换行符作为行分隔符。
所以,请勿在bcp和load table联合使用时指定row delimited by 'x0a' 或者 '
',否则会报错!
Sybase IQ客户端执行导入SQL的两种方式,当然这个要基于你服务器所拥有的客户端(如dbisql或isql):
dbisql -q -c "uid=eastcom;pwd=EastCom!$" -host 127.0.0.1 -port 4100 -nogui [SQL_FILE]
-q表示安静模式,不输出信息。
SQL_FILE可以是SQL语句,也可以是保存SQL语句的文件
isql -Ueastcom -PEastCom!$ -Sdatamark -i SQL_FILE -o OUTPUT_FILE
SQL_FILE 存有SQL语句的文件
OUTPUT_FILE 输出信息的文件