Teradata应用迁移到AnalyticDB for PostgreSQL指导
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指导相关推荐
- Oracle应用迁移到AnalyticDB for PostgreSQL指导
AnalyticDB for PostgreSQL(简称:ADB for PG)对Oracle语法有着较好的兼容,本文介绍如何将Oracle应用迁移到AnalyticDB for PostgreSQL ...
- 如何将数据仓库从 AWS Redshift 迁移到阿里云 AnalyticDB for PostgreSQL
阿里云AnalyticDB for PostgreSQL(以下简称 ADB PG,即原HybridDB for PostgreSQL)为基于PostgreSQL内核的MPP架构的实时数据仓库服务,可以 ...
- 聚水潭是如何基于AnalyticDB for PostgreSQL 构筑海量实时数仓平台的
聚水潭数据仓库业务介绍 上海聚水潭网络科技有限公司成立于2014年.聚水潭创建之初,以电商SaaS ERP切入市场,凭借出色的产品和服务,快速获得市场领先地位.随着客户需求的不断变化,如今聚水潭已经发 ...
- Tableau BI工具对接 AnalyticDB for PostgreSQL数据源
AnalyticDB for PostgreSQL(原HybridDB for PostgreSQL)作为高性能分析型数据库,可以支持用户对其业务数据进行实时分析,能够让企业敏锐感知市场动态,做出必要 ...
- 使用Quick BI连接AnalyticDB for PostgreSQL数据源
本文介绍如何通过阿里云Quick BI连接AnalyticDB for PostgreSQL数据库. 在Quick BI中新建AnalyticDB for PostgreSQL数据源 登录Quick ...
- oracle到pg不停机增量迁移,研究 Oracle 到 PostgreSQL 的数据迁移 – 以 pgloader 为例 – Phy 的博客...
一点实习成果,过程中学了很多东西,就放出来吧,欢迎交流指正. pgloader 介绍 一个开源的工具,用来把数据从其他地方导入到 PostgreSQL 写入 PostgreSQL 的时候用的 COPY ...
- 迁移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 ...
- tensorflow1.0代码迁移到2.0官方指导
https://www.tensorflow.org/guide/migrate 解决源代码中tensorflow版本过低问题(tensorflow1.x代码迁移到2.0) 原创风一样的rain 最后 ...
- cdc工具 postgresql_SQLServer CDC数据通过Kafka connect实时同步至分析型数据库 AnalyticDB For PostgreSQL及OSS-阿里云开发者社区...
背景 SQLServer为实时更新数据同步提供了CDC机制,类似于Mysql的binlog,将数据更新操作维护到一张CDC表中. 开启cdc的源表在插入INSERT.更新UPDATE和删除DELETE ...
最新文章
- Iframe父页面与子页面之间的相互调用
- oracle sql-1,Oracle – Oracle SQL(1)
- .NET Core 3.0中的新功能和增强功能
- tkinter的pack布局与place布局结合
- 2.1 InnoDB存储引擎(概述、版本、体系结构)
- 经典Flash MX 2004教程全集
- android qq第三方登录 实现,Android Studio实现第三方QQ登录操作代码
- python怎样分析文献综述_文献综述实例评析
- c语言:输出一个菱形图案
- 第三版新视野大学英语读写教程4结业考点(1,2,3,5,6单元)
- 使用钉钉自定义机器人发信息
- 2020python二级考试时间_2020年计算机二级考试时间及考试科目
- python自动化脚本常用方法小结
- 结合自己经历的一场机器人省赛浅谈如何学习单片机
- error LNK2005解决方法
- 博客系统与CSDN博客
- hexo 添加图片,音乐,链接,视频
- 华大超低功耗单片机-样片、开发板快速免费申请方法
- Python实现银行金额大写汉字转换【简单易懂】!!
- 武夷山启动元宇宙计划,如何看待云旅游?
热门文章
- java程序员应该掌握的技术才算得上熟练Java开发
- html代码里面换图片不显示不出来了,微擎 Ueditor 百度编辑器 替换图片不显示问题...
- linux 多线程客户端服务端通信,[转载]多线程实现服务器和客户端、客户端和客户端通信;需要代码,留言...
- 【LeetCode笔记】338. 比特位计数(Java、位运算、动态规划)
- python 数字类型和字符串类型的相互转换_python 数字类型和字符串类型的相互转换...
- 树莓派 python spi,树莓派测试SPI-基于设备操作ioctl
- python图片横向合并_[宜配屋]听图阁
- c++ 多重背包状态转移方程_Python|动态规划关于0-1背包问题
- python仪表指针识别_一种指针式仪表的识别方法
- 加装的硬盘进入后点不了文件夹_在外接移动硬盘上制作win to go教程