https://bss.csdn.net/m/topic/kingbase
本文正在参与“炫库”行动--人大金仓有奖征文
-
一、 数据类型兼容性
- 通常异构数据库移植的工作量繁重。这些工作量主要来源于:在数据类型、SQL语言、PL/SQL语言、甚至客户端应用编程接口等诸多方面对两个数据库所进行的、大量的语法或功能的对齐处理。本节对不同数据类型做对比说明
- 二进制数据类型
-
Netezza
KADB
备注
VARBINARY(n)
支持
支持
通过varbit类型支持
ST_GEOMETRY(n)
支持
支持
通过PostGIS支持
- 字符数据类型
-
Netezza
KADB
备注
Fixed length, character(n) (alias char(n))
支持
最大长度64000
支持
最大长度10485760
通过char [ (n) ]类型支持
Variable length, character varying(n) (alias varchar(n))
支持
最大长度64000
支持
最大长度10485760
通过varchar [ (n) ]支持
Fixed length, Unicode (alias nchar(n))
支持
最大长度16000
可以用char [ (n) ]替代
Variable length, Unicode (alias nvarchar(n))
支持
最大长度16000
可以用varchar [ (n) ]替代
- 精确数字类型
-
Netezza
KADB
备注
byteint (alias int1)
支持
1字节,-128~127
支持
可以用smallint替代
-32,768~32,767
smallint (alias int2)
支持
2字节,-32,768~32,767
支持
integer (alias int and int4)
支持
4字节,-2,147,483,648~ 2,147,483,647
支持
bigint (alias int8)
支持
8字节,-9,223,372,036,854,775,808 ~9,223,372,036,854,775,807
支持
numeric(p, s)
支持
支持
使用numeric [ (p, s) ]的别名decimal [ (p,
s) ]
numeric(p)
支持
使用numeric [ (p) ]的别名decimal [ (p) ]
numeric
支持
使用numeric的别名decimal
decimal
支持
- 非精确数字类型
-
Netezza
KADB
备注
float(p)
支持
支持
可以用decimal(p)替代
real
支持
相当于float(6)
支持
double precision
支持
支持
- 逻辑数字类型
-
Netezza
KADB
备注
boolean (alias bool)
支持
取值为true(t)或者false(f)
支持
- 时间类型
-
Netezza
KADB
备注
date
支持
支持
time
支持
支持
ime with time zone (alias timetz)
支持
支持
timestamp
支持
支持
interval (alias timespan)
支持
支持
numeric(6,0)
支持
时间跨度,例如:010521代表1小时5分21秒
不支持
numeric(8,0)
支持
不支持
numeric(14,0)
numeric(15,1)
numeric(16,2)
numeric(17,3)
numeric(18,4)
numeric(19,5)
numeric(20,6)
支持
例如:类型为numeric(17,3)的00017355018391999,表示1年73个月55天1小时83分钟91.999秒
不支持
-
二、SQL语法差异
- MERGE INTO 语句(不支持)
-
MERGE INTO 语句根据与源表连接的结果,对目标表进行插入和更新操作,通常用来实现表同步。Netezza的MERGE INTO语法如下所示:
MERGE INTO target_table [ [ AS ] target_alias [ ( column_alias_list ) ] ]
USING source_table [ [ AS ] source_alias [ ( column_alias_list ) ] ]
ON matching_condition
when_condition_then_action [, ...]
[ ELSE IGNORE ]
KADB不支持MERGE INTO 语句。 - Create table语句
-
Netezza数据库表的分布键由1到4个列组成,并通过关键字DISTRIBUTE ON指定,支持的数据分布包括:HASH、RANDOM。使用关键字ORGANIZE ON可以将1到4个列组成一个簇,同一个簇中的列物理上保存在一起。
KADB除支持Netezza表的分布键特性外,还支持复制表(可以将数据量较小的维度表复制到集群中的每一个计算节点上,加快访问速度)和表分区功能(表按照分布键分布到计算节点中,在每一个计算节点上使用表分区将局部数据二次分组) - 表的访问方式
-
Netezza支持表的跨库访问特性,可以使用下面的语法访问位于不同数据库中的表:
database.schema.table
KADB不直接支持表的跨库访问,访问表的语法为:
database.table - GROOM TABLE语句
-
Netezza使用GROOM TABLE命令回收表中的过期数据并将delete语句影响的数据从磁盘上回收,在命令执行期间允许其他会话访问表,语法为:
GROOM TABLE
例如:
MYDB.SCH1(USER)=> GROOM TABLE
RECORDS ALL;
KADB可以使用命令VACUUM命令达到同Netezza一样的功能,语法如下:
VACUUM [({ FULL | FREEZE | VERBOSE | ANALYZE } [, ...])] [table [(column
[, ...] )]]
例如:
VACUUM ANALYZE;
事务
数据库使用事务保证数据的完整性,处于同一事务的SQL语句要么都成功执行,要么都不执行。Netezza唯一实现了ANSI定义的4中隔离级别中的Serializable隔离级别。KADB实现了4种隔离级别:
- Read committed
- Read uncommitted
支持下面的事务语法:
- BEGIN、START TRANSACTION开启一个事务
- END、COMMIT提交一个已经开启的事务
- ROLLBACK回滚事务中所作的所有操作,恢复数据到事务开始前的状态
- SAVEPOINT在事务中标记一个锚点,支持部分事务回滚
- ROLLBACK TO SAVEPOINT回滚一个事务到标记的位置.
- RELEASE SAVEPOINT 释放事务中使用SAVEPOINT标记的锚点位置
- Repeatable read
- Serializable
迁移方案
IBM datastage工具迁移- 迁移步骤
- 配置ETL工具的数据源端(Netezza)连接,按照表梳理的结果配置表的迁移(迁移涉及到拉链表和增量表)
- 配置ETL工具的数据目标端(KingbaesMPP)连接
- 配置迁移作业
- 按照第6章的数据校验方案进行迁移后的数据校验
- 方案存在问题及解决
使用ETL工具可能存在的数据不一致问题:
- 文本乱码问题
- 数字精度问题
- 迁移效率问题
对于问题1、2,可以通过第6章的数据校验方案解决。
对于问题3,需要测试估算Datastage在现场硬件配置的情况下实际的迁移效率,评估是否能在规定的迁移时间窗口内完成迁移。同时对需要迁移的数据做梳理统计,将表分批迁移。首先,迁移保证应用运行必须的数据,在不影响应用运行的前提下,逐步将其他历史数据做迁移。对于增量表,按天为单位迁移最近的数据,历史数据可以逐步追加迁移。
nzsql的-o参数导出文本迁移- 迁移步骤
- 使用Netezza的nzsql工具将表的数据导出为文本,例如
nzsql -t -d iss_testdb -u portal -pw portal -o 'zb.txt' -c "SELECT …… FROM ZB_METRICS" -F '|'
为了提高效率,多个表的导出可以写成脚本的方式进行,通过脚本控制导出任务的并发
- 将导出的数据拷贝到加载机
- 在KingbaesMPP数据库中创建表,选择合适的分布方式
- 使用批量加载工具gpload从加载机中加载数据到KingbaesMPP中,为了提高效率,多个表的加载可以写成脚本的方式进行,通过脚本控制加载任务的并发
- 按照第6章的数据校验方案进行迁移后的数据校验
- 方案存在问题及解决
使用nzsql导出表的数据为文本的方式存在下述的问题:
- 文本乱码问题
- 数字精度问题
- 迁移效率问题
对于问题1、2,可以通过第6章的数据校验方案解决。
对于问题3,需要测试估算在现场硬件配置的情况下实际的迁移效率,评估是否能在规定的迁移时间窗口内完成迁移。同时对需要迁移的数据做梳理统计,将表分批迁移。首先,迁移保证应用运行必须的数据,在不影响应用运行的前提下,逐步将其他历史数据做迁移。对于增量表,按天为单位迁移最近的数据,历史数据可以逐步追加迁移。
为了提高导出和导入的效率,在测试的基础上把数据导出/导入的步骤脚本化,通过脚本控制导出/导入的并发任务数。
Netezza外部表导出文本迁移- 迁移步骤
- 创建Netezza外部表,例如:
CREATE EXTERNAL TABLE extemp SAMEAS emp USING (DATAOBJECT
('/tmp/emp.dat'));
- 将需要迁移的表数据通过外部表卸载为文本文件
INSERT INTO extemp SELECt * FROM emp;
- 将导出的数据拷贝到加载机
- 在KingbaesMPP数据库中创建表,选择合适的分布方式
- 使用批量加载工具gpload从加载机中加载数据到KingbaesMPP中
为了提高迁移效率可以将上述的导出/导入步骤脚本化,并通过脚本控制数据导出/导入的并发。
- 方案存在问题及解决
使用外部表导出表的数据为文本的方式存在下述的问题:
- 使用Netezza外部表可能导致产品本身的bug,造成数据库宕机
- 文本乱码问题
对于问题2、3,可以通过第6章的数据校验方案解决。
对于问题4,需要测试估算在现场硬件配置的情况下实际的迁移效率,评估是否能在规定的迁移时间窗口内完成迁移。同时对需要迁移的数据做梳理统计,将表分批迁移。首先,迁移保证应用运行必须的数据,在不影响应用运行的前提下,逐步将其他历史数据做迁移。对于增量表,按天为单位迁移最近的数据,历史数据可以逐步追加迁移。
为了提高导出和导入的效率,在测试的基础上把数据导出/导入的步骤脚本化,通过脚本控制导出/导入的并发任务数。
对于问题1,目前缺乏原厂技术支持的情况下,只能在测试过程中减小导出工作对源数据库的压力。另外建议在数据库运行压力低峰时执行导出任务,并做好数据库宕机恢复预案。- 数字精度问题
- 迁移效率问题
大数据系统相关栏目本月热门文章
- 1【Linux驱动开发】设备树详解(二)设备树语法详解
- 2别跟客户扯细节
- 3Springboot+RabbitMQ+ACK机制(生产方确认(全局、局部)、消费方确认)、知识盲区
- 4【Java】对象处理流(ObjectOutputStream和ObjectInputStream)
- 5【分页】常见两种SpringBoot项目中分页技巧
- 6一文带你搞懂OAuth2.0
- 7我要写整个中文互联网界最牛逼的JVM系列教程 | 「JVM与Java体系架构」章节:虚拟机与Java虚拟机介绍
- 8【Spring Cloud】新闻头条微服务项目:FreeMarker模板引擎实现文章静态页面生成
- 9JavaSE - 封装、static成员和内部类
- 10树莓派mjpg-streamer实现监控及拍照功能调试
- 11用c++写一个蓝屏代码
- 12从JDK8源码中看ArrayList和LinkedList的区别
- 13idea 1、报错java: 找不到符号 符号: 变量 log 2、转换成Maven项目
- 14在openwrt使用C语言增加ubus接口(包含C uci操作)
- 15Spring 解决循环依赖
- 16SpringMVC——基于MVC架构的Spring框架
- 17Andy‘s First Dictionary C++ STL set应用
- 18动态内存管理
- 19我的创作纪念日
- 20Docker自定义镜像-Dockerfile
热门相关搜索路由器设置 木托盘 宝塔面板 儿童python教程 心情低落 朋友圈 vim 双一流学科 专升本 我的学校 日记学校 西点培训学校 汽修学校 情书 化妆学校 塔沟武校 异形模板 西南大学排名 最精辟人生短句 6步教你追回被骗的钱 南昌大学排名 清朝十二帝 北京印刷学院排名 北方工业大学排名 北京航空航天大学排名 首都经济贸易大学排名 中国传媒大学排名 首都师范大学排名 中国地质大学(北京)排名 北京信息科技大学排名 中央民族大学排名 北京舞蹈学院排名 北京电影学院排名 中国戏曲学院排名 河北政法职业学院排名 河北经贸大学排名 天津中德应用技术大学排名 天津医学高等专科学校排名 天津美术学院排名 天津音乐学院排名 天津工业大学排名 北京工业大学耿丹学院排名 北京警察学院排名 天津科技大学排名 北京邮电大学(宏福校区)排名 北京网络职业学院排名 北京大学医学部排名 河北科技大学排名 河北地质大学排名 河北体育学院排名



