在如何从Teradata迁移到Greenplum(上篇)中,向大家介绍了Teradata产品和用户面临的问题、从Teradata迁移到Greenplum的可行性以及如何从Teradata迁移到Greenplum的部分内容,今天将接着和大家分享如何从Teradata迁移到Greenplum的具体内容。
03
数据操作语句(DML)转换
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;
举例:
注意:该转换需要手动搜索脚本进行转换。
5. 调用函数区别
在查询中调用函数,绝大多数的Teradata支持的标准化函数Greenplum都支持。对于部分Teradata特有的函数,Greenplum虽然没有相同的函数名,但是有相应的函数或者解决方式,请参考后面04 函数转换的内容进行相应转换。
注意:该转换需要手动搜索脚本进行转换。
6. Delete
(1)在不关联其他表,本地根据条件删除记录时,Teradata与Greenplum的语法相同,无须转换;需要关联其他表删除符合条件的记录时,Teradata与Greenplum如果使用子查询的方式,则语法相同;如果通过直接连接的方式,则语法不同,需要进行相应的转换。Greenplum从目标表删除符合条件记录语句的语法如下:
DELETE FROM [ONLY] table [[AS] alias]
[USING usinglist]
[WHERE condition]
其中: