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关键系统函数对照表:

TeradataADB 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之间的随机整数


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一张900w的数据表,怎么把原先要花费17s执行的SQL优化到300ms?

来源 | 程序员乔戈里 封图| CSDN下载于视觉中国有一张财务流水表&#xff0c;未分库分表&#xff0c;目前的数据量为9555695&#xff0c;分页查询使用到了limit&#xff0c;优化之前的查询耗时16 s 938 ms (execution: 16 s 831 ms, fetching: 107 ms)&#xff0c;按照下文的方…

Flowable 数据库表结构 ACT_RU_IDENTITYLINK

运行时流程人员表( act_ru_identitylink ) 任务参与者数据表。主要存储当前节点参与者的信息。 字段名称字段描述数据类型主键为空取值说明ID_ID_nvarchar(64)√ID_REV_乐观锁int√乐观锁GROUP_ID_组IDnvarchar(64)√组IDTYPE_类型nvarchar(255)√备注7USER_ID_用户IDnvarchar…

浅析基于 Serverless 的前后端一体化框架

概述 Serverless 是一种“无服务器架构”模式&#xff0c;它无需关心程序运行环境、资源及数量&#xff0c;只需要将精力聚焦到业务逻辑上的技术。基于 Serverless 开发 web 应用&#xff0c;架构师总是试图把传统的解决方案移植到 Serverless 上&#xff0c;虽然可以做到既拥…

Java-总结

常用类 集合框架 IO流 多线程 网络编程 GUI 注解与反射 https://www.bilibili.com/video/BV12J41137hu?p80

一文告诉你,如何在 Kubernetes 的容器引擎中运行 KVM 和 VMware VM!

作者 | Gilson Melo译者 | 天道酬勤 责编 | 徐威龙封图| CSDN下载于视觉中国随着微服务的出现&#xff0c;人们通常会问&#xff1a;“是否有可能通过Kubernetes上的微服务在基于内核的虚拟机&#xff08;KVM&#xff09;或VMware 中运行我的旧虚拟机&#xff0c;还是需要将它们…

Flowable 数据库表结构 ACT_RU_EXECUTION

运行时流程执行实例表( act_ru_execution ) 字段名称字段描述数据类型主键为空取值说明ID_ID_nvarchar(64)√ID_REV_乐观锁int√乐观锁PROC_INST_ID_流程实例IDnvarchar(64)流程实例IDBUSINESS_KEY_业务主键IDnvarchar(255)√业务主键IDPARENT_ID_父节点实例IDnvarchar(64)√父…

性能压测工具选型对比

本文是《Performance Test Together》&#xff08;简称PTT&#xff09;系列专题分享的第二期&#xff0c;该专题将从性能压测的设计、实现、执行、监控、问题定位和分析、应用场景等多个纬度对性能压测的全过程进行拆解&#xff0c;以帮助大家构建完整的性能压测的理论体系&…

adb-基础命令

查看连接 adb devices --查看连接的手机安装APP adb install -r apk在电脑路径 -- 安装APP adb install -r 替换已存在的应用程序&#xff0c;也就是说强制安装 adb install -g 为应用程序授予所有运行时的权限 -l 锁定该应用程序 -r 替换已存在的应用程序&…

大数据架构如何做到流批一体?

阿里妹导读&#xff1a;大数据与现有的科技手段结合&#xff0c;对大多数产业而言都能产生巨大的经济及社会价值。这也是当下许多企业&#xff0c;在大数据上深耕的原因。大数据分析场景需要解决哪些技术挑战&#xff1f;目前&#xff0c;有哪些主流大数据架构模式及其发展&…

一群阿里人如何用 10 年自研洛神云网络平台?技术架构演进全揭秘!

【CSDN 编者按】逍遥子曾说&#xff0c;对阿里人来说「打仗是最好的团建&#xff0c;参加过双 11 的叫战友」&#xff0c;同样&#xff0c;参加过多次双 11 考验的系统技术都会成为真正意义上的基础设施&#xff0c;阿里云飞天系统的云网络平台洛神就是如此。本文作者 —— 阿里…

Flowable 数据库表结构 ACT_RE_PROCDEF

流程定义数据表( act_re_procdef ) 业务流程定义数据表。此表和 ACT_RE_DEPLOYMENT 是多对一的关系&#xff0c;即&#xff0c;一个部署的bar包里可能包含多个流程定义文件&#xff0c;每个流程定义文件都会有一条记录在 ACT_REPROCDEF 表内&#xff0c;每个流程定义的数据&…

数据人看Feed流-架构实践

背景 Feed流&#xff1a;可以理解为信息流&#xff0c;解决的是信息生产者与信息消费者之间的信息传递问题。 我们常见的Feed流场景有&#xff1a; 1 手淘&#xff0c;微淘提供给消费者的首页商品信息&#xff0c;用户关注店铺的新消息等 2 微信朋友圈&#xff0c;及时获取朋友…

Java-端口

windows 查看端口 netstat -ano # 查看所有端口 netstat -ano | findstr "8080" # 查看含有8080的行&#xff0c;查看指定端口 tasklist | findstr "20100" # 查看指定端口的进程 Ctrl Shift Esc # 打开任务管理器public class TestInetSocketAddr…

Flowable 数据库表结构 ACT_RU_EVENT_SUBSCR

字段名称字段描述数据类型主键为空取值说明ID_事件IDnvarchar(64)√事件IDREV_版本int√乐观锁VersionEVENT_TYPE_事件类型nvarchar(255)事件类型EVENT_NAME_事件名称nvarchar(255)√事件名称EXECUTION_ID_执行实例IDnvarchar(64)√执行实例IDPROC_INST_ID_流程实例IDnvarchar(…

“出道” 5 年采用率达 78%,Kubernetes 的成功秘诀是什么?

作者 | Matt Asay译者 | 天道酬勤 责编 | 徐威龙封图| CSDN下载于视觉中国很难相信Kubernetes直到2015年中期&#xff08;首次提交后的一年&#xff09;才达到1.0版本&#xff0c;因为容器编排平台目前已经在云原生计算基金会&#xff08;CNCF&#xff09;调查的企业中生产了78…

K8S环境中NAS卷添加noresvport方法

通过K8S使用NAS卷&#xff0c;请区分以下场景&#xff1a; 静态存储卷&#xff1a; 使用阿里云ACK&#xff0c;PV、PVC方式&#xff0c;nfs驱动&#xff1b; 使用阿里云ACK&#xff0c;PV、PVC方式&#xff0c;Flexvolume驱动&#xff1b; 使用阿里云ACK&#xff0c;…

Java-内置注解

注解&#xff1a; Java.Annotation (注释 comment) // 什么是注解 public class Test01 extends Object{// Override 重写的注解Overridepublic String toString() {return super.toString();} }// SuppressWarnings 镇压警告&#xff0c;写了就没有 变量没有使用的警告了Sup…

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

本文介绍如何通过阿里云Quick BI连接AnalyticDB for PostgreSQL数据库。 在Quick BI中新建AnalyticDB for PostgreSQL数据源 登录Quick BI控制台。单击工作空间>数据源&#xff0c;进入数据源管理页面。单击新建数据源>AnalyticDB for PostgreSQL。在添加AnalyticDB fo…

Flowable 数据库表结构 ACT_RE_MODEL

流程设计模型部署表( act_re_model ) 流程设计器设计流程后&#xff0c;保存数据到该表。 字段名称字段描述数据类型主键为空取值说明ID_ID_nvarchar(64)√ID_ID_ID_nvarchar(64)√ID_REV_乐观锁int√乐观锁NAME_名称nvarchar(255)√名称KEY_KEY_nvarchar(255)√分类CATEGORY_…

开源背后 | 面对端侧推理引擎的挑战,阿里工程师如何应对?

阿里妹导读&#xff1a;MNN&#xff08;Mobile Neural Network&#xff09;已于今年5月7日在 Github 上正式开源。淘宝无线开发专家——陈以鎏&#xff08;离青&#xff09;在 GMTC 全球大前端技术大会为大家分享了 MNN 开发、开源中的思考与总结&#xff0c;通过淘宝在移动 AI…