GaussDB(DWS)迁移:一种执行高效的TereData的marco迁移方案

gaussdb,dws,迁移,一种,执行,高效,teredata,marco,方案 · 浏览次数 : 113

小编点评

## 执行高效的TereData的marco迁移方案 **作者: 譡里个檔** **摘要:** 本文分享如何执行高效的Teradata的marco迁移方案,包括: * 使用DWS的函数替换TeraData的宏 * 测试表定义 * 创建OR REPLACE函数 * 使用NOT SHIPPABLE和SECURITY INVOKER属性 **主要内容:** 1. **Teradata宏定义**: * 创建存储过程`get_emp_salary` * 定义参数`employeeno`,`out_employeeeno`,`out_netpay` * 使用`SELECT`语句获取 employeeeno 和 netpay * 定义返回值类型为SETOF record 2. **DWS迁移函数定义**: * 创建函数`public.get_emp_salary` * 定义输入参数`employeeno`,输出参数`employeeeno`和`netpay` * 使用`SELECT`语句获取 employeeeno 和 netpay * 使用`RETURN SETOF record`定义返回值类型 3. **注意事项**: * 函数属性设置:`STABLE2`,`SQL`,`NOT SHIPPABLE`,`SECURITY INVOKER` * 函数权限属性:`SECURITY INVOKER` **优点:** * 避开FuctionSCan换成层和SQL下推 * 效率更高,执行速度快 **案例:** ```sql -- 函数定义 CREATE OR REPLACE FUNCTION public.get_emp_salary(employeeno integer, OUT employeeeno integer, OUT netpay integer) RETURNS SETOF record LANGUAGE sqlNOT SHIPPABLE STABLEAS $function$ SELECT employeeno, netpay FROM test.salary WHERE employeeno = $1; -- 执行函数 SELECT * FROM get_emp_salary(1); ``` **效果:** 执行`SELECT * FROM get_emp_salary(1)`,查询结果为: ``` employeeno | netpay --- | --- 1 | 1 ```

正文

摘要:提供一种执行高效的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)迁移:一种执行高效的TereData的marco迁移方案

摘要:提供一种执行高效的TereData的marco迁移方案。 本文分享自华为云社区《GaussDB(DWS)迁移 - teredata兼容 -- macro兼容 # 【玩转PB级数仓GaussDB(DWS)】》,作者: 譡里个檔 。 Teradata的宏是一组可以接受参数的SQL语句,通过调用宏名

一种DWS迁移Oracle的CONNECT BY语法的方案

摘要:本文提供一种GaussDB DWS迁移CONNECT BY语法方案。 本文分享自华为云社区《GaussDB(DWS)迁移 - oracle兼容 -- CONNECT BY迁移》,作者: 譡里个檔 。 CONNECT BY NOCYCLE 1) 预置对象定义 DROP SCHEMA IF EXI

GaussDB(DWS)迁移实践丨row_number输出结果不一致

摘要:迁移前后结果集row_number字段值前后不一致,前在DWS上运行不一致。 本文分享自华为云社区《GaussDB(DWS)迁移 - oracle兼容 --row_number输出结果不一致》,作者:譡里个檔 。 【问题表现】 迁移前后结果集row_number字段值前后不一致,前在DWS上运

DSC:数仓SQL脚本迁移的神奇工具

摘要:本文介绍的DSC工具是针对数据库切换时面临的迁移任务而开发的免安装命令行工具。目的是提供简单、快速、可靠的SQL脚本迁移服务。 本文分享自华为云社区《GaussDB(DWS)DSC工具系列:DSC工具初识【玩转PB级数仓GaussDB(DWS)】》,作者:积少成多 。 DSC背景介绍与DSC介

详解GaussDB(DWS)中的行执行引擎

本文分享自华为云社区《GaussDB(DWS)行执行引擎详解》,作者:yd_227398895。 1.前言 GaussDB(DWS)包含三大引擎,一是SQL执行引擎,用来解析用户输入的SQL语句,生成执行计划,供执行引擎来执行;二是执行引擎,其中包含了行执行引擎和列执行引擎,执行引擎即查询的执行者,

GaussDB(DWS)性能调优,解决DM区大内存占用问题

本文分享自华为云社区《GaussDB(DWS)性能调优:DM区优化案例——维度表关联条件存在会计期》,作者: O泡果奶~。 当前DM(P1、P3、CBGDM)存在维度表与主表关联时使用会计期作为关联条件,会导致出现大内存占用或未识别数据倾斜的问题 【场景一】f.period_id = 维度表.per

云小课|GaussDB(DWS)数据存储尽在掌控,冷热数据切换自如

阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击此处。 摘要: GaussDB(DWS)支持根据业务系统的不同使用需求,对膨胀的数据进行冷热分级管理,将数据按照时间分为热数据、冷数

GaussDB(DWS)现网案例:collation报错

摘要:用户创建hash分布表,使用pbe方式执行使用分布列作为查询条件的语句时报错 本文分享自华为云社区《GaussDB(DWS)现网案例之collation报错》,作者: 你是猴子请来的救兵吗 。 用户创建hash分布表,使用pbe方式执行使用分布列作为查询条件的语句时报错,ERROR: coul

GaussDB(DWS)性能调优:indexscan导致的性能问题识别与优化

摘要:通常跑批加工场景下,都是大数量做关联操作,通常不建议使用索引。有些时候因为计划误判导致使用索引的可能会导致严重的性能问题。本文从一个典型的索引导致性能的场景重发,剖析此类问题的特征,定位方法和解决方法 本文分享自华为云社区《GaussDB(DWS)性能调优:indexscan导致的性能问题识别

GaussDB(DWS)案例丨MERGE场景下语句不下推引起的性能瓶颈问题

本文针对MERGE场景下SQL语句因执行不下推而导致执行效率低下的案例进行分析。