从事数据库工作多年,目前看好分布式NeSQL/HTAP数据库在企业客户市场的发展。未来的主要方向是——致力于 NewSQL/HTAP 数据库的推广普及。
分类: Sybase
2011-11-10 14:32:22
6.客户端装载
从IQ 15开始,IQ的bulk loader(即IQ的装载引擎)支持客户端装载。也就是说,对于LOAD TABLE语句来说,输入的数据文件可以位于客户端(IQ 15之前,要求数据文件必须位于IQ Server端,或IQ Server端可以访问到的位置)。
对于客户端装载,需要使用LOAD TABLE语句的USING CLIENT FILE子句。LOAD TABLE USING FILE 用于装载本地服务器上的数据文件,这种写法是IQ 15中新增的一种语法,其作用与 IQ 12.7的LOAD TABLE FROM 相同(IQ 12.7的LOAD TABLE语法在IQ 15中不用修改,仍然得到支持)。如果需要注意的是客户端装有如下要求:
(1)客户端需要采用IQ 15的Client软件。15.0 服务器与12.7 客户端搭配使用将返回文件 I/O 错误。
(2)支持的客户端访问接口如下:
ODBC、OLE DB,、ADO.NET、JDBC iAnywhere driver、Perl、PHP和Python等
(3)目前不支持采用TDS协议的Client,包括:E-SQL/Open Client、JDBC jConnec driver。
IQ 15的客户端装载支持支持所有的装载选项,包括LOB支持。客户端load的执行时间由网络传递时间和server端load table时间组成。IQ在处理客户端装载时,首先打开数据文件然后通过网络发送数据包,每个数据包包含了数据文件的一部分数据,IQ Server接受这些数据包并把它们存放在服务器端的内存中,然后进行装载处理。一般来说,客户端装载要比server端装载时间与ftp时间之和要快。在IQ 15中iq_bcp工具已经被废弃,其功能可以通过LOAD TABLE USING CLIENT FILE替代。
下面是客户端装载的几个例子:
例子1(客户端多线索装载)
LOAD TABLE month
(
month_key '|!' ,
month_text '|!' ,
month_number '|!'
)
USING CLIENT FILE '/home/cas/S1/MSIAC01'
ESCAPES OFF
QUOTES OFF
NOTIFY 1000000
ROW DELIMITED BY '\x0a'
WITH CHECKPOINT ON;
COMMIT;
例子2(客户端单线索装载)
LOAD TABLE month
(
month_key '|!' ,
month_text '|!' ,
month_number '\x0a'
)
USING CLIENT FILE '/home/cas/S1/MSIAC01'
ESCAPES OFF
QUOTES OFF
NOTIFY 1000000
WITH CHECKPOINT ON;
COMMIT;
例子3(使用java+jdbc iAnywhere driver进行客户端装载的例子)
public void dbConnect() {
try {
Class.forName("ianywhere.ml.jdbcodbc.jdbc3.IDriver");
this.cqascon = DriverManager.getConnection("jdbc:ianywhere:Driver=SQL Anywhere 11;uid=dba;pwd=sql;eng=iqdemo;links=tcpip(host=myhost;port=2638)");
}
catch(Exception e) {
……
}
}
public void load(String sqlstr) {
Statement cqasStm = null;
try {
cqasStm = this.cqascon.createStatement();
boolean flag=cqasStm.execute(sqlstr);
} catch (SQLException e) {
……
}
}
public static void main(String[] args) {
……
app.DbConnect();
String filestr="LOAD TABLE montht\n";
filestr+="( month_key '|',\n";
filestr+=" month_text '|',\n";
filestr+=" month_number '\\x0a')\n";
filestr+=“ Using client file 'c:\\data\\month.txt'\n";
filestr+=“ escapes off\n";
filestr+=“ quotes off\n";
filestr+=“ notify 100\n";
filestr+=“ with checkpoint on;\n";
app.load(filestr);
}