- 函数语法转换
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. 关键字转换
在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;
例如:
注意:该转换需要手动搜索脚本进行转换