AnalyticDB for PostgreSQL(简称:ADB for PG)对Teradata语法有着很好的兼容,将Teradata应用迁移到ADB for PG,只需进行有限的修改。本文介绍将Teradata应用迁移到ADB for PG应该注意的事项。

1 建表语句

我们通过一个例子比较ADB for PG和Teradata的建表语句。对于如下的Teradata建表SQL语句,

CREATE MULTISET TABLE test_table,NO FALLBACK ,NO BEFORE JOURNAL,NO AFTER JOURNAL,CHECKSUM = DEFAULT,DEFAULT MERGEBLOCKRATIO(first_column DATE FORMAT 'YYYYMMDD' TITLE '第一列' NOT NULL,second_column INTEGER TITLE '第二列' NOT NULL ,third_column CHAR(6) CHARACTER SET LATIN CASESPECIFIC TITLE '第三列' NOT NULL ,fourth_column CHAR(20) CHARACTER SET LATIN CASESPECIFIC TITLE '第四列' NOT NULL,fifth_column CHAR(1) CHARACTER SET LATIN CASESPECIFIC TITLE '第五列' NOT NULL,sixth_column CHAR(24) CHARACTER SET LATIN CASESPECIFIC TITLE '第六列' NOT NULL,seventh_column VARCHAR(18) CHARACTER SET LATIN CASESPECIFIC TITLE '第七列' NOT NULL,eighth_column DECIMAL(18,0) TITLE '第八列' NOT NULL ,nineth_column DECIMAL(18,6) TITLE '第九列' NOT NULL )
PRIMARY INDEX ( first_column ,fourth_column )
PARTITION BY RANGE_N(first_column  BETWEEN DATE '1999-01-01' AND DATE '2050-12-31' EACH INTERVAL '1' DAY );CREATE INDEX test_index (first_column, fourth_column) ON test_table;

可以修改成ADB for PG的建表语句:

CREATE TABLE test_table(first_column DATE NOT NULL,second_column INTEGER NOT NULL ,third_column CHAR(6) NOT NULL ,fourth_column CHAR(20) NOT NULL,fifth_column CHAR(1) NOT NULL,sixth_column CHAR(24) NOT NULL,seventh_column VARCHAR(18) NOT NULL,eighth_column DECIMAL(18,0) NOT NULL ,nineth_column DECIMAL(18,6) NOT NULL )
DISTRIBUTED BY ( first_column ,fourth_column )
PARTITION BY RANGE(first_column)
(START (DATE '1999-01-01')  INCLUSIVE
END (DATE '2050-12-31')  INCLUSIVE
EVERY (INTERVAL '1 DAY' ) );create index test_index on test_table(first_column, fourth_column);

通过以上例子,我们可以很清晰地分析ADB for PG和Teradata建表语句的异同:
1、ADB for PG和Teradata的数据类型是互相兼容的,数据类型不需要做修改;
2、ADB for PG和Teradata均支持分布列,但语法不同,Teradata是primary index,ADB for PG是distributed by;
3、ADB for PG和Teradata均支持PARTITION BY二级分区,语义相同但语法不同;
4、ADB for PG和Teradata均支持对表创建索引,但语法不同;
5、ADB for PG不支持TITLE关键字,但是支持单独对列添加注释COMMENT,语法为COMMENT ON COLUMN table_name.column_name IS 'XXX';
6、ADB for PG不能在定义char或者varchar时声明编码类型,而是在连接上数据库时,通过执行“SET client_encoding = latin1;”来申明编码类型。

2 导入导出数据格式

ADB for PG支持txt、csv格式的数据导入导出,和Teradata的区别就在于数据文件的分隔符:Teradata支持双分隔符,而ADB for PG只支持单分隔符。

3 SQL语句

ADB for PG和Teradata的SQL语法大部分都是兼容的,除了特定的Teradata语法、系统函数是需要进行修改的。

3.1 特定语法

3.3.1 cast

Teradata支持类似如下的cast语法:

cast(XXX as int format '999999')
cast(XXX as date format 'YYYYMMDD')

而ADB for PG支持类似cast(XXX as int)、cast(XXX as date),不支持在cast中声明format。所以,对于cast(XXX as int format '999999'),需要编写函数来实现相同功能;而对于cast(XXX as date format 'YYYYMMDD'),ADB for PG支持date的显示格式为'YYYY-MM-DD',这个是不影响正常使用的。

3.3.2 qualify

Teradata的qualify关键字,用来根据用户的条件,进一步过滤前序排序计算函数得到的结果。如下是一个Teradata的qualify关键字使用例子:

SELECT itemid, sumprice, RANK() OVER (ORDER BY sumprice DESC)FROM (SELECT a1.item_id, SUM(a1.sale)FROM sales AS a1 GROUP BY a1.itemID) AS t1 (itemid, sumprice) QUALIFY RANK() OVER (ORDER BY sum_price DESC) <=100;

而ADB for PG是不支持qualify关键字的,所以需要将带qualify的sql语句,修改为子查询嵌套:

SELECT itemid, sumprice, rank from
(SELECT itemid, sumprice, RANK() OVER (ORDER BY sumprice DESC) as rankFROM (SELECT a1.item_id, SUM(a1.sale)FROM sales AS a1 GROUP BY a1.itemID) AS t1 (itemid,sumprice)
)  AS a
where rank <=100;

3.3.3 macro

Teradata通过macro来执行一组SQL语句,一个典型的macro例子为:

CREATE MACRO Get_Emp_Salary(EmployeeNo INTEGER) AS ( SELECT EmployeeNo, NetPay FROM  Salary WHERE EmployeeNo = :EmployeeNo;
);

ADB for PG不支持macro,但是可以轻易地用ADB for PG的function来完成Teradata的macro功能:

CREATE OR REPLACE FUNCTION Get_Emp_Salary(EmployeeNo INTEGER,OUT EmployeeNo INTEGER,OUT NetPay FLOAT
) returns setof record AS
$$SELECT EmployeeNo,NetPay FROM SalaryWHERE EmployeeNo = $1$$LANGUAGE SQL;

3.3.4 系统函数

ADB for PG和Teradata关键系统函数对照表:

Teradata ADB for PG 备注
zeroifnull(C) COALESCE(C,0) 如果C为空,则返回0
substr(str, from, len) substring(str, from, len) 从str中的第from开始,截取len长度子串
index(str1, str2) strpos(str1, str2) 确定str2在str1中的位置
oreplace(str1, str2, str3) replace(str1, str2, str3) 把str1中的str2替换成str3
random(lower_bound,upper_bound) floor(random() * (upper_bound - lower_bound) + lower_bound) 取lower_bound和upper_bound之间的随机整数

原文链接
本文为云栖社区原创内容,未经允许不得转载。

Teradata应用迁移到AnalyticDB for PostgreSQL指导相关推荐

  1. Oracle应用迁移到AnalyticDB for PostgreSQL指导

    AnalyticDB for PostgreSQL(简称:ADB for PG)对Oracle语法有着较好的兼容,本文介绍如何将Oracle应用迁移到AnalyticDB for PostgreSQL ...

  2. 如何将数据仓库从 AWS Redshift 迁移到阿里云 AnalyticDB for PostgreSQL

    阿里云AnalyticDB for PostgreSQL(以下简称 ADB PG,即原HybridDB for PostgreSQL)为基于PostgreSQL内核的MPP架构的实时数据仓库服务,可以 ...

  3. 聚水潭是如何基于AnalyticDB for PostgreSQL 构筑海量实时数仓平台的

    聚水潭数据仓库业务介绍 上海聚水潭网络科技有限公司成立于2014年.聚水潭创建之初,以电商SaaS ERP切入市场,凭借出色的产品和服务,快速获得市场领先地位.随着客户需求的不断变化,如今聚水潭已经发 ...

  4. Tableau BI工具对接 AnalyticDB for PostgreSQL数据源

    AnalyticDB for PostgreSQL(原HybridDB for PostgreSQL)作为高性能分析型数据库,可以支持用户对其业务数据进行实时分析,能够让企业敏锐感知市场动态,做出必要 ...

  5. 使用Quick BI连接AnalyticDB for PostgreSQL数据源

    本文介绍如何通过阿里云Quick BI连接AnalyticDB for PostgreSQL数据库. 在Quick BI中新建AnalyticDB for PostgreSQL数据源 登录Quick ...

  6. oracle到pg不停机增量迁移,研究 Oracle 到 PostgreSQL 的数据迁移 – 以 pgloader 为例 – Phy 的博客...

    一点实习成果,过程中学了很多东西,就放出来吧,欢迎交流指正. pgloader 介绍 一个开源的工具,用来把数据从其他地方导入到 PostgreSQL 写入 PostgreSQL 的时候用的 COPY ...

  7. 迁移pg之后org.postgresql.util.PSQLException: ERROR: could not find left sibling of block 4594 in index..

    org.postgresql.util.PSQLException: ERROR: could not find left sibling of block 4594 in index "s ...

  8. tensorflow1.0代码迁移到2.0官方指导

    https://www.tensorflow.org/guide/migrate 解决源代码中tensorflow版本过低问题(tensorflow1.x代码迁移到2.0) 原创风一样的rain 最后 ...

  9. cdc工具 postgresql_SQLServer CDC数据通过Kafka connect实时同步至分析型数据库 AnalyticDB For PostgreSQL及OSS-阿里云开发者社区...

    背景 SQLServer为实时更新数据同步提供了CDC机制,类似于Mysql的binlog,将数据更新操作维护到一张CDC表中. 开启cdc的源表在插入INSERT.更新UPDATE和删除DELETE ...

最新文章

  1. Iframe父页面与子页面之间的相互调用
  2. oracle sql-1,Oracle – Oracle SQL(1)
  3. .NET Core 3.0中的新功能和增强功能
  4. tkinter的pack布局与place布局结合
  5. 2.1 InnoDB存储引擎(概述、版本、体系结构)
  6. 经典Flash MX 2004教程全集
  7. android qq第三方登录 实现,Android Studio实现第三方QQ登录操作代码
  8. python怎样分析文献综述_文献综述实例评析
  9. c语言:输出一个菱形图案
  10. 第三版新视野大学英语读写教程4结业考点(1,2,3,5,6单元)
  11. 使用钉钉自定义机器人发信息
  12. 2020python二级考试时间_2020年计算机二级考试时间及考试科目
  13. python自动化脚本常用方法小结
  14. 结合自己经历的一场机器人省赛浅谈如何学习单片机
  15. error LNK2005解决方法
  16. 博客系统与CSDN博客
  17. hexo 添加图片,音乐,链接,视频
  18. 华大超低功耗单片机-样片、开发板快速免费申请方法
  19. Python实现银行金额大写汉字转换【简单易懂】!!
  20. 武夷山启动元宇宙计划,如何看待云旅游?

热门文章

  1. java程序员应该掌握的技术才算得上熟练Java开发
  2. html代码里面换图片不显示不出来了,微擎 Ueditor 百度编辑器 替换图片不显示问题...
  3. linux 多线程客户端服务端通信,[转载]多线程实现服务器和客户端、客户端和客户端通信;需要代码,留言...
  4. 【LeetCode笔记】338. 比特位计数(Java、位运算、动态规划)
  5. python 数字类型和字符串类型的相互转换_python 数字类型和字符串类型的相互转换...
  6. 树莓派 python spi,树莓派测试SPI-基于设备操作ioctl
  7. python图片横向合并_[宜配屋]听图阁
  8. c++ 多重背包状态转移方程_Python|动态规划关于0-1背包问题
  9. python仪表指针识别_一种指针式仪表的识别方法
  10. 加装的硬盘进入后点不了文件夹_在外接移动硬盘上制作win to go教程