GaussDB(DWS)迁移:一种执行高效的TereData的marco迁移方案
摘要:提供一种执行高效的TereData的marco迁移方案。
本文分享自华为云社区《GaussDB(DWS)迁移 - teredata兼容 -- macro兼容 # 【玩转PB级数仓GaussDB(DWS)】》,作者: 譡里个檔 。
Teradata的宏是一组可以接受参数的SQL语句,通过调用宏名称来执行一段SQL语句,执行上类似于DWS的存储过程。在迁移的时候也建议使用DWS的函数替换TeraData的宏。
测试表定义
CREATE SCHEMA test;
CREATE TABLE test.salary(
employeeno integer,
netpay integer
)
WITH (orientation=row, compression=no)
DISTRIBUTE BY ROUNDROBIN;
INSERT INTO test.salary VALUES (1, 1);
TereData宏定义
CREATE MACRO get_emp_salary(employeeno integer) AS (
SELECT
employeeno,
netpay
FROM test.salary
WHERE employeeno = :employeeno;
);
DWS迁移的函数定义
CREATE OR REPLACE FUNCTION public.get_emp_salary(
employeeno integer,
OUT employeeno integer,
OUT netpay integer
)
RETURNS SETOF record
LANGUAGE sql
NOT SHIPPABLE STABLE
AS $function$
SELECT
employeeno,
netpay
FROM test.salary
WHERE employeeno = $1;
$function$;
Note:函数定义中属性要如上定义,需要明确的是
1) 必须是STABLE
2) 函数语言必须是SQL语言
3) 查询语句的返回值类型和函数的出参类型一致
4) 必须是NOT SHIPPABLE(默认就是NOT SHIPPABLE属性)
5) 不能定义为STRICT属性(默认就是非STRICT属性)
6) 不能定义配置参数(默认就是非STRICT属性)
7) 函数的权限属性为SECURITY INVOKER(默认就是SECURITY INVOKER属性)
这样定义的好处是就是当函数体中是简单的单查询语句时,函数调用可以直接优化为对函数体内的SQL语句的调用,执行上避开FuctionSCan的换成层以及SQL不下推的问题,执行上更加高效(具体见下面的case)
语句执行效果
postgres=# EXPLAIN VERBOSE SELECT * FROM get_emp_salary(1);
QUERY PLAN
------------------------------------------------------------------------------------------------------
id | operation | E-rows | E-distinct | E-width | E-costs
----+-----------------------------------------------------+--------+------------+---------+---------
1 | -> Data Node Scan on salary "_REMOTE_TABLE_QUERY_" | 1 | | 8 | 0.00
Targetlist Information (identified by plan id)
------------------------------------------------------------------------------------------
1 --Data Node Scan on salary "_REMOTE_TABLE_QUERY_"
Output: salary.employeeno, salary.netpay
Node/s: All datanodes
Remote query: SELECT employeeno, netpay FROM ONLY test.salary WHERE employeeno = 1
(10 rows)
GaussDB(DWS)迁移:一种执行高效的TereData的marco迁移方案的更多相关文章
- 详解GaussDB(DWS) explain分布式执行计划
摘要:本文主要介绍如何详细解读GaussDB(DWS)产生的分布式执行计划,从计划中发现性能调优点. 前言 执行计划(又称解释计划)是数据库执行SQL语句的具体步骤,例如通过索引还是全表扫描访问表中的 ...
- 基于SpringBoot实现操作GaussDB(DWS)的项目实战
摘要:本文就使用springboot结合mybatis plus在项目中实现对GaussDB(DWS)的增删改查操作. 本文分享自华为云社区<基于SpringBoot实现操作GaussDB(DW ...
- GaussDB(DWS)运维:导致SQL执行不下推的改写方案
摘要:本文就针对因USING子句的书写方式可能导致MERGE INTO语句的执行不下推的场景,对USING子句的SQL语句进行改写一遍,整个SQL语句可以下推. 本文分享自华为云社区<Gauss ...
- 从数据仓库双集群系统模式探讨,看GaussDB(DWS)的容灾设计
摘要:本文主要是探讨OLAP关系型数据库框架的数据仓库平台如何设计双集群系统,即增强系统高可用的保障水准,然后讨论一下GaussDB(DWS)的容灾应该如何设计. 当前社会.企业运行当中,大数据分析. ...
- 十八般武艺玩转GaussDB(DWS)性能调优(三):好味道表定义
摘要:表结构设计是数据库建模的一个关键环节,表定义好坏直接决定了集群的有效容量以及业务查询性能,本文从产品架构.功能实现以及业务特征的角度阐述在GaussDB(DWS)的中表定义时需要关注的一些关键因 ...
- GaussDB(DWS)应用实践丨负载管理与作业排队处理方法
摘要:本文用来总结一些GaussDB(DWS)在实际应用过程中,可能出现的各种作业排队的情况,以及出现排队时,我们应该怎么去判断是否正常,调整一些参数,让资源分配与负载管理更符合当前的业务:或者在作业 ...
- 探索GaussDB(DWS)的过程化SQL语言能力
摘要:在当前GaussDB(DWS)的能力中主要支持两种过程化SQL语言,即基于PostgreSQL的PL/pgSQL以及基于Oracle的PL/SQL.本篇文章我们通过匿名块,函数,存储过程向大家介 ...
- 十八般武艺玩转GaussDB(DWS)性能调优:SQL改写
摘要:本文将系统介绍在GaussDB(DWS)系统中影响性能的坏味道SQL及SQL模式,帮助大家能够从原理层面尽快识别这些坏味道SQL,在调优过程中及时发现问题,进行整改. 数据库的应用中,充斥着坏味 ...
- 十八般武艺玩转GaussDB(DWS)性能调优:路径干预
摘要:路径生成是表关联方式确定的主要阶段,本文介绍了几个影响路径生成的要素:cost_param, scan方式,join方式,stream方式,并从原理上分析如何干预路径的生成. 一.cost模型选 ...
- 详解GaussDB(DWS) 资源监控
摘要:本文主要着重介绍资源池资源监控以及用户资源监控. 本文分享自华为云社区<GaussDB(DWS)资源监控之用户.队列资源监控>,作者: 一只菜菜鸟. GaussDB(DWS)资源监控 ...
随机推荐
- C、C++函数和类库详解(VC++版)(2016-06-26更新)
C.C++函数和类库详解(VC++版)(未完成) 整理者:赤勇玄心行天道 QQ:280604597 Email:280604597@qq.com 大家有什么不明白的地方,或者想要详细了解的地方可以联系 ...
- 【虹科干货】Redis Enterprise vs ElastiCache——如何选择缓存解决方案?
使用Redis 或 Amazon ElastiCache 来作为缓存加速已经是业界主流的解决方案,二者各有什么优势?又有哪些区别呢? 为了提高 Web 应用程序和数据驱动服务的性能与效率,使用 Red ...
- 2023江苏省领航杯(部分CRYPTO题目复现)
决赛 回文 1.题目信息 =QfzEDO4YDNlBzN4gzN0YGM1QzYyUGZ3QDZzgDM7V2Sn52bI52Q= 2.解题方法 base64解码,两种思路: 要么是去掉前面=号解码 ...
- [学习笔记]TypeScript查缺补漏(一):类
@ 目录 基础知识 创建类型 类的初始化 类型和值 JSDoc 注释 字段 私有字段 可选和非可选字段 字段类型约束 Getter/Setter 静态成员 函数重载 构造函数 参数属性 类的实例化 箭 ...
- JavaScript 语法:流程控制语句
作者:WangMin 格言:努力做好自己喜欢的每一件事 JavaScript流程控制语句的三种基本结构:顺序结构,选择结构,循环结构 顺序结构 从上到下执行的代码就是顺序结构,程序默认就是由上到下顺序 ...
- SQL改写案例2
postgresql 并没有像 oracle .dm 有这么丰富的 hint,在不改 sql 的情况下能干预执行计划. 如果想学好 postgresql.kingbase.MySQL 的sql 调优 ...
- AcWing 190. 字串变换
原题连接:AcWing 190. 字串变换 题意: 已知有两个字串 \(A, B\) 及一组字串变换的规则(至多 \(6\) 个规则): \(A_1→B_1\) \(A_2→B_2\) \(-\) 规 ...
- python的动态绑定属性和方法
目录 创建类 动态绑定属性 动态绑定方法 创建类 首先我们创建一个类和它的对象 class Student: def __init__(self, name, age): self.name = na ...
- 前端解析excel表格
需求如下: 前端拿到表格中的数据,对数据做以下判断,并将拿到的数据转换成以下json格式,传给后端. 具体实现: 下载npm包:npm install xlsx --save 在vue文件中引入依赖: ...
- 累加器Adder
① java8引⼊的,相⽐较是⼀个⽐较新的类 ② ⾼并发下LogAdder⽐AtomicLog效率⾼,不过本质是空间换时间 ③ 竞争激烈的时候,LongAdder把不同线程对应到不同的Cell上进⾏修 ...