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)资源监控 ...
随机推荐
- IEDA-Maven项目开发步骤
1. 打开IDEA 界面,选择"New Project" 2. 输入项目名称和基本信息 输入项目名称.选择存放路径.JDK版本.以及GroupId.ArtifactId. Grou ...
- ansible-配置文件优化-性能调优
ansible-配置文件详解:ansible默认配置文件为/etc/ansible/ansible.cfg,配置文件中可以对ansible进行各项参数的调整,包括并发线程.用户.模块路径.配置优化等, ...
- JS动态在父元素里追加元素——insertAdjacentHTML
insertAdjacentHTML() 方法将指定的文本解析为 Element 元素,并将结果节点插入到 DOM 树中的指定位置.它不会重新解析它正在使用的元素,因此它不会破坏元素内的现有元素.这避 ...
- go中的内存逃逸
内存逃逸(memory escape)是指在编写 Go 代码时,某些变量或数据的生命周期超出了其原始作用域的情况.当变量逃逸到函数外部或持续存在于堆上时,会导致内存分配的开销,从而对程序的性能产生负面 ...
- oceanbase 数据库SQL优化 (把你的脑袋当成CBO)
OB一哥们找我优化条SQL,反馈在OceanBase存储过程执行时间很慢,需要626秒才能出结果,安排. INSERT INTO insurance_stat_sx (id, stat_date, c ...
- Senparc 基础库全面适配 .NET 8.0
概要 Senparc 全家桶中的基础库已经全面适配 .NET 8.0,目前随着 .NET 8.0 的 RC 版本不断发布,对应的版本号也将同步进行更新,直到本月 Ignite 大会微软官方发布 .NE ...
- notepad++中使用正则表达式处理数据
如何使用正则表达式提取文本中的特定行? 以下是一个示例文本: [ INFO] HW RTC: 2023-05-15 07:21:00 [ INFO] HW RTC timestamp:16841352 ...
- 火山引擎 DataLeap 计算治理自动化解决方案实践和思考
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 [导读]本文旨在探讨火山引擎 DataLeap 在处理计算治理过程中所面临的问题及其解决方案,并展示这些解决方案带 ...
- Linux 本地AMH 服务器管理面板实现远程访问方法
AMH 是一款基于 Linux 系统的服务器管理面板,它提供了一系列的功能,包括网站管理.FTP 管理.数据库管理.DNS 管理.SSL 证书管理等.使用 AMH 云主机面板可以方便地管理服务器,提高 ...
- [ABC274Ex] XOR Sum of Arrays
section> Problem Statement For sequences $B=(B_1,B_2,\dots,B_M)$ and $C=(C_1,C_2,\dots,C_M)$, eac ...