Netezza向GBase 8a迁移总结

Netezza向GBase 8a迁移总结

目 录

  1. 前言

  2. 数据类型

2.1. 综述

2.2. 数值类型

2.2.1. 精确数值数据类型

2.2.2. 近似数值数据类型

2.3. 字符串数据类型

2.3.1. char(n)、varchar(n)

2.3.2. nchar(n)、nvarchar(n)

2.4. 逻辑数据类型

2.4.1. boolean(bool)

2.5. 时间数据类型

2.5.1. date

2.5.2. time

2.5.3. time with time zone(alias timetz)

2.5.4. timestamp

2.5.5. interval (alias timespan)

2.5.6. numeric类

2.6. 二进制数据类型

2.6.1. VARBINARY(n)

2.6.2. ST_GEOMETRY(n)

2.7. Netezza内部数据类型

2.7.1. rowid

2.7.2. transaction ID

2.7.3. data sliceid

  1. 操作符

3.1. 综述

3.2. Netezza与GBase 8a操作符对照表

3.2.1. 一元、二元操作符

3.2.2. 二元文本连接操作符

3.2.3. 关系操作符

3.3. 操作符优先级

  1. 谓词

4.1. 综述

4.2. 逻辑谓词

4.3. 比较谓词

4.4. 存在谓词

4.5. In 谓词

4.6. Null判断谓词

4.7. 范围表达式

4.8. 模式匹配谓词

4.9. 谓词优先级

  1. 函数

5.1. 综述

5.2. 控制流函数

5.3. 字符串函数

5.4. 转换函数

5.5. 日期时间函数

5.6. 聚合函数

5.7. value function

5.8. 数学函数

5.8.1. 三角函数

5.8.2. 随机函数

5.8.3. 其它数学函数

5.8.4. 位函数

5.9. 非聚合函数

5.10. OLAP函数

  1. 存储过程的迁移

6.1. 创建语法

6.1.1. GBase 8a 创建存储过程语法

6.1.2. Netezza创建存储过程语法

6.1.3. 示例

6.2. 参数

6.2.1. GBase 8a参数

6.2.2. Netezza参数

6.3. 定义变量

6.3.1. GBase 8a变量定义

6.3.2. Netezza变量定义

6.4. 返回值

6.5. if 语句

6.5.1. GBase 8a if语句

6.5.2. Netezza if语句

6.5.3. 示例

6.6. while 语句

6.6.1. GBase 8a while 语句

6.6.2. Netezza while语句

6.7. Loop

6.7.1. GBase 8a loop语句

6.7.2. Netezza loop语句

6.8. EXIT语句

6.8.1. GBase 8a LEAVE语句

6.8.2. Netezza EXIT语句

6.8.3. 示例:

6.9. for循环

6.10. 游标

6.11. 异常捕捉

6.11.1. Gbase 8a异常捕捉

6.11.2. Netezza异常捕捉

  1. 其它

7.1. ROW_COUNT

7.2. 复杂查询语句

7.2.1. 集合操作

7.2.2. 使用子查询

7.2.3. 表连接查询

7.2.4. 使用GROUP BY

7.2.5. 使用HAVING 子句

7.2.6. 使用 ROLLUP

7.3. 带子查询的更新

  1. 前言
    本迁移指南面向数据库开发人员,目标是为基于Netezza数据库的应用系统向GBase 8a数据库迁移提供指导性的、快速的指南。因此在本文档中内容的组织是以面向常规应用,力求覆盖全面为原则,对两种数据库一些细节内容,读者可以参考相应的Netezza相关资料可参考https://www.ibm.com/docs/en/psfa/7.1.0和GBase 8a的《用户手册》来获取细节信息。

  2. 数据类型
    2.1. 综述
    本节的内容用于指导在将Netezza的表迁移到GBase 8a的表过程中涉及到的Netezza标准数据类型如何映射到GBase 8a数据库表中。主要包含如下数据类型:

l 二进制数据类型

l 字符数据类型

l 数字数据类型

l 日期时间数据类型。

2.2. 数值类型
2.2.1. 精确数值数据类型
2.2.1.1. byteint (alias int1)
在netezza中byteint (alias int1)这个数值长度是-128 – 127,GBase 8a TINYINT取值范围是127 到 127,建议用GBase 8a 的TINYINT来替代。

2.2.1.2. smallint (alias int2)
在netezza中smallint (alias int2)这个数值长度是-32,768 到32,767,GBase 8a对应smallint取值范围是-32,767 到 32,767,建议用GBase 8a 的smallin来替代。

2.2.1.3. integer (alias int and int4)
在Netezza中integer (alias int and int4)这个数值长度是-2,147,483,648 t到2,147,483,647,GBase 8a对应int取值范围是-2147483647 到 2147483647,建议用GBase 8a 的int来替代。

2.2.1.4. bigint (alias int8)
在Netezza中bigint (alias int8) 这个数值长度是-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807,GBase 8a无此范围对用的数据类型。

2.2.1.5. numeric(p,s)
Netezza中numeric(p,s)是具有精度总位数 p 和小数 s 的数字。精度范围从 1 到 38,范围从 0 到精度。小数点右边超出s的范围,四舍五入,GBase 8a支持 numeric(p,s)数据类型, 也可用decimal数据类型替换。

2.2.1.6. Numeric§
Netezza中numeric§等价于 numeric(p, 0),GBase 8a 中支持该类型数据,也可以用decimal数据类型替换。

2.2.1.7. Numeric
Netezza中numeric等价于 numeric(18, 0),GBase 8a 中支持该类型数据,也可以用decimal数据类型替换。

2.2.1.8. decimal
在Netezza中虽然decimal是一种新的据类型,但是netezza sql将其等同于numeric使用,故在GBase 8a 中同样可以用decimal数据类型替换。

2.2.2. 近似数值数据类型
2.2.2.1. float§
标准SQL类型,在迁移中,如果精度要求不太高时,在GBase 8a中采用float数据类型,不需要替换,如果精度要求高的,建议改为decimal数据类型。

2.2.2.2. real
标准的 SQL 数据类型,在Netezza中real是float(6)同义词,在GBase 8a中,可以用decimal(p,s)数据类型替代。

2.2.2.3. double
在Netezza中当float(p)数据类型中p大于6时,float与double数据类型等价,故在GBase 8a 中可以用double替换或者deicimal替换。

2.3. 字符串数据类型
2.3.1. char(n)、varchar(n)
Netezza中char(n)、nchar(n)最大长度为64,000字符,其中char(n)为固定字符串数据类型,varchar(n)为可变字符串数据类型,迁移时,在GBase 8a 中建议均用varchar字符串数据类型。

2.3.2. nchar(n)、nvarchar(n)
Netezza中nchar(n)、nvarchar(n)最大长度为16,000字符,其中nchar是固定字符串数据类型,nvarchar(n)是可变字符串数据类型,迁移时,在GBase 8a中均用varchar(n)字符串类型替换。

2.4. 逻辑数据类型
2.4.1. boolean(bool)
Netezza中boolean,也可以写为bool,GBase 8a 中没有bool这个逻辑数据类型,可以用tinyint(1)替换。

2.5. 时间数据类型
2.5.1. date
Netezza中date日期格式是yyyy-mm-dd,,时间范围是0001-01-01-9999-12-31,GBase 8a date数据类型范围同样是0001-01-01-9999-12-31,故迁移过程中,不要替换。

2.5.2. time
Netezza中time 取值范围从 00:00:00.000000 到23:59:59.999999,GBase 8a中 time范围从-838:59:59到838:59:59,故迁移过程中,time数据类型不需要替换。

2.5.3. time with time zone(alias timetz)
Netezza中time with time zone数据类型范围从00:00:00.000000+13:00 - 23:59:59.999999-12:59,时间偏移从GMT(格林威治时间)开始。GBase 8a 没有对应数据类型。

2.5.4. timestamp
Netezza中timestamp数据类型范围January 1,000100:00:00.000000 to December 31,9999 23:59:59.999999,GBase 8a timestamp数据类型范围从1970-01-01 08:00:01到2038-01-01 00:59:59 ,datetime范围从0001-01-01 00:00:00.000000到 9999-12-31 23:59:59.999999,故迁移到GBase 8a过程中可用在timestamp或者datetime替换。

2.5.5. interval (alias timespan)
Netezza中timespan是非标准sql数据类型,GBase 8a没有对用的数据类型,建议用varchar替代。

2.5.6. numeric类
Netezza中numeric类也可以作为时间数据类型,表示时间的持续,该数据类型在Gbase 8a如果表示时间,不支持。Netezza中该类详细数据类型见下表

数据类型

说明

磁盘使用情况

numeric(6,0)

持续时间,即hhmmss格式的表示时间段的数值。例如,持续时间 010521 表示时间段为 1 小时 5 分 21 秒。

4字节

numeric数字(8,0)

日期持续时间,即以 YYYYMMDD 格式表示时间段的数值。例如,持续时间 00010521 表示一年零五个月零 21 天的时间段。

4字节

numeric(14,0)

numeric(15,1)

numeric(16,2)

numeric(17,3)

numeric(18,4)

numeric(19,5)

numeric(20,6)

时间戳时长,即包含14-20位数字,表示时间段的数值:

l 前 8 位数字以 YYYYMMDD

格式表示持续时间的日期部分。

l 接下来的 6 位数字

hhmmss 格式表示持续时间的时

间部分。

l 最后的 0-6 位数字表示

几分之一秒。

例如,数字(17,3)格式的持续时间 00017355018391999 表示时间段为一年 73 个月 55 天 1 小时 83 分 91.999 秒。

16字节

2.6. 二进制数据类型
Netezza中有两种二进制数据类型,分别是VARBINARY(n)、ST_GEOMETRY(n),其中VARBINARY(n)在GBase8a中支持。而目前GBase8a的二进制数据类型blob和longblob,Netezza均不支持。

2.6.1. VARBINARY(n)
Netezza中二进制数据类型VARBINARY(n),Gbase 8a 也是支持该数据类型。

2.6.2. ST_GEOMETRY(n)
Netezza中二进制数据类型ST_GEOMETRY(n),Gbase 8a不支持该类型,且无对应数据类型替换。

2.7. Netezza内部数据类型
2.7.1. rowid
Netezza rowid范围值为100,000-9,223,372,036,854,775,807,初始rowid值从100,000开始,当时初始分配的rowid用完后,系统分配另一范围内值rowid,因为rowid是不连续的。在GBase 8a中rowid范围值为1-100,000-9,223,372,036,854,775,807。

2.7.2. transaction ID
Netezza中标识创建记录的事务ID(createxid)和删除记录的事务ID(deletexid),如果没有删除记录,则为0。当系统更新一条记录时,它会使用当前事务 ID 更新原始行上的 deletexid,插入一条具有更新值的记录,并保留该 rowid。

xid 是一个 8 字节的整数,其中 48 位是有效的。安装时,初始 xid 值为 1024。 xid 的大小允许超过 100 万亿 (100,000,000,000,000) 个交易 ID。

GBase 8a不支持该类数据类型。

2.7.3. data sliceid
标识存储在每个磁盘上的数据库部分。在安装时,系统被分成逻辑数量的数据切片。当系统创建一个记录时,它会根据它的分布键将它分配给一个逻辑数据片(也就是一个物理磁盘)。尽管系统动态生成 datasliceid 值,但它不会将它们与每个单独的记录一起存储。可以在查询中使用 datasliceid 关键字来识别记录来自哪个数据切片。

GBase 8a不支持该类数据类型。

  1. 操作符
    3.1. 综述
    Netezza标准算术运算符(加法、减法、乘法、除法、求幂和取模)使用标准优先级规则。即取幂先运行;乘法、除法和取模;加减法最后。可以使用括号来更改此优先级。Netezza® SQL 以从左到右的方式评估相同优先级的运算符,除非使用括号改变优先级。

Netezza内置的 SQL 操作符与 GBase 8a 基本上都可以对应上。这些操作符可以分为 5 类。算术操作符、关系操作符、分级查询操作符、Multiset 操作符、 集合操作符。

3.2. Netezza与GBase 8a操作符对照表
每一个Netezza 的算术操作符大部分都有一个同样的 GBase 8a 操作符对应,在迁移的时候不需要进行修改。具体迁移时,可以参考下表进行对照迁移

操作符种类

操作符

Netezza

GBase 8a

GBase 8a 可替换方案

备注

二元操作符

支持

支持

支持

支持

支持

支持

/

支持

支持

^or**

支持

不支持

通过用POW(X,Y),POWER(X,Y)函数替代

%

支持

支持

一元操作符

支持

支持

支持

支持

支持

不支持

阶乘操作符

二元文本操作符

||

支持

支持

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值