Teradata数据库调研及迁移KADB建议(11)

  1. 函数语法转换

Teradata与Greenplum的函数转换规则如下表所示。

函数转换示例

(1)QUALIFY 函数
将QUALIFY  ROW_NUMBER() OVER () =1 语法修改为下图所示的形式。

(2)CHAR函数

在Greenplum数据库部署CHAR函数,函数定义如下:

CREATE OR REPLACE FUNCTION "character"(text)

    RETURNS integer AS

  $BODY$select  length($1)$BODY$

LANGUAGE 'sql' IMMUTABLE STRICT;

CREATE OR REPLACE FUNCTION "char"(text)

    RETURNS integer AS

  $BODY$select  length($1)$BODY$

    LANGUAGE 'sql' IMMUTABLE STRICT;

(3)CHAR_CHN函数

在Greenplum数据库部署CHAR_CHN函数,函数定义如下:

CREATE OR REPLACE FUNCTION "char_chn"(text)

RETURNS integer AS

$BODY$select  octet_length(convert($1,'UNICODE','GBK'))$BODY$

LANGUAGE 'sql' IMMUTABLE STRICT;

(4)ZEROIFNULL函数

在Greenplum数据库部署ZEROIFNULL函数,函数定义如下:

CREATE OR REPLACE FUNCTION zeroifnull(anyelement)

RETURNS integer AS

$BODY$select  coalesce($1,0)::integer $BODY$

LANGUAGE 'sql' IMMUTABLE ;

  1. 其他语法转换

1. 关键字转换

 在Teradata中,SELECT关键字可以简写为SEL,而在Greenplum中不支持这种简写。转换规则:把SEL替换为标准关键字写法SELECT。

 注意:该转换不建议全局替换,因为有可能字段名为SEL,因此需要手动搜索脚本进行转换。

2. 别名关键字转换

 在Teradata中,字段的别名除了可以通过AS子句指定外,还可以通过NAMED子句指定;而在Greenplum中,不支持NAMED子句,因此,需要进行转换。

 注意:该转换不建议全局替换,因为有可能字段名为NAMED,因此需要手动搜索脚本进行转换。

 3. 子查询别名转换

 在Teradata中子查询不需要指定别名,在Greenplum中子查询需要给予别名。转换规则如下:

SELECT column1

FROM table1

WHERE column2 IN

(SELECT column1

FROM table2 );

转换为:

SELECT column1

FROM table1

WHERE column2 IN

(SELECT column1

FROM table2 ) as alias_name;

注意:该转换需要手动搜索脚本进行转换。

 4. 字段别名转换

 在Teradata中,字段引用别名后,直接可以引用别名进行其他操作。但是,Greenplum不支持在定义字段别名后,直接通过别名对字段进行其他操作。只能通过嵌套子查询的方式进行转换。

SELECT

sum(column1) as alias1,

alias1/12 as alias2

FROM table1;

转换为:

SELECT

Sum(column1) as alias1,

Sum(column1)/12 as alias2

FROM table1

WHERE column2 IN

(SELECT column1

FROM table2 ) as alias_name;

例如:

注意:该转换需要手动搜索脚本进行转换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值