Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1634350
  • 博文数量: 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

2013-10-25 14:35:00

     有时我们可能需要把ASE数据库中某些带有timestamp类型字段的表数据使用bcp out导出,然后装载到IQ数据中。由于ASE timestamp类型与IQ的timestamp实现时存在差异,在进行这种导出、导入时需要加以注意。本文将结合例子介绍数据迁移的方法以及相关注意事项。

1. 在ASE数据库中创建测试表,并插入数据

create table test1(id int,name char(8),chg_idf timestamp)
insert into test1 values(100,'wang')
insert into test1(id,name) values(101,'zhang')

--执行查询查看表中记录
1> select * from test1
2> go
 id          name     chg_idf           
 ----------- -------- ------------------
         100 wang     0x00000000000175ad
         101 zhang    0x00000000000175b0 
 
通过查询我们可以看到,ASE的timestamp类型是由ASE自动生成值的,并且这些值时一组16进制的数值。实际上,ASE的timestamp数据类型为binary(8)。

2. 使用bcp工具导出测试表中的数据

--执行bcp out命令导出数据
bcp test1 out /tmp/test1.dat -Usa -P -STEST -c -t"@|@" -r"\n"

--下面是bcp执行过程中显示的信息
Starting copy...

2 rows copied.
Clock Time (ms.): total = 79  Avg = 39 (25.32 rows per sec.)

3. 在IQ数据库中创建表

create table test1(id int,name char(8),chg_idf timestamp default TIMESTAMP)

4. 编写load table脚本

--load1.sql
message 'load table test1' type info to client ;
LOAD TABLE test1
(
  id       ,
  name     ,
  chg_idf       '\x0a'
)
FROM '/tmp/test1.dat'
FORMAT ASCII
ESCAPES OFF
QUOTES OFF
NOTIFY 500000
WITH CHECKPOINT ON;

5. 执行load table 脚本
 

 dbisql -c "uid=DBA;pwd=sql" -nogui load1.sql

当执行装载脚本时会报如下错误: 

  Cannot convert 00000000000175ad to a timestamp (column chg_idf)
  SQLCODE=-157, ODBC 3 State="07006"

   为什么会报这样的错误呢?这是因为ASE中的timestamp实际上是类型binary(8),而IQ中的timestamp是datetime类型,这两者之间是不能转换的。为了解决问题,在IQ
数据库中的表增加一个字段,类型为binary(8)。具体如下:

--在IQ数据库中创建一个新表test2
create table test2 (id int,name char(8), ase_timestamp binary(8), chg_idf timestamp default TIMESTAMP)

--新的load table脚本
message 'load table test1' type info to client ;
LOAD TABLE test2
(
  id       ,
  name     ,
  ase_timestamp '\x0a'
)
FROM '/tmp/test1.dat'
FORMAT ASCII
ESCAPES OFF
QUOTES OFF

WITH CHECKPOINT ON;
COMMIT;
 
再次执行load脚本,数据成功装载到IQ

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