Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1634446
  • 博文数量: 201
  • 博客积分: 2812
  • 博客等级: 少校
  • 技术积分: 3029
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-18 18:28
个人简介

从事数据库工作多年,目前看好分布式NeSQL/HTAP数据库在企业客户市场的发展。未来的主要方向是——致力于 NewSQL/HTAP 数据库的推广普及。

文章存档

2016年(1)

2015年(8)

2014年(23)

2013年(50)

2012年(32)

2011年(87)

分类: 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);   
}

 

 

阅读(6413) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~