《PolarDB for PostgreSQL源码与应用实战》——PolarDB for PostgreSQL用SQL做数据分析(4)

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 《PolarDB for PostgreSQL源码与应用实战》——PolarDB for PostgreSQL用SQL做数据分析(4)

《PolarDB for PostgreSQL源码与应用实战》——PolarDB for PostgreSQL用SQL做数据分析(3) https://developer.aliyun.com/article/1232909?groupCode=polardbforpg


3、用户定义函数


我们知道,数据导进来之后,我们是可以通过UPDATE更新值的,所以在COPY命令导入数据后,我们可以执行4UPDATE命令,把4个特征中的NULL值依次更新成0。但每次导数据都要执行4条语句很麻烦,有没有办法可以一次性执行4条UPDATE呢?


这里就用到了PolarDB一个非常重要的功能——用户定义的函数(UDF,User Defined Function)。PolarDB的UDF非常强大,大家甚至可以把他看成是一种FaaS(Function as a Service),它允许我们用很多种不同的编程语言来写函数,在无须重启数据库、更不用重新编译数据库内核的情况下,能直接使用动态创建的函数。函数的定义用CREATE FUNCTION,详细用法大家可以参考文档。


image.png


上图中用PLPGSQL这门语言创建了一个叫update_null_to_zero的函数。其中PLPGSQL是PolarDB自带的一种编程语言,此外还支持用SQL、Python等其他主流编程语言。update_null_to_zero这个函数没有返回值,所以returns是void,

函数体里除了开头的begin和结尾的end,就是4句更新语句。


4、后置触发器


函数定义完之后,调用函数的方法也非常简单,就是函数前面加上select就行。但又有另一个问题,每次导入数据后,都要记得手工执行一下这个填充缺失值的函数,有没有办法在每次数据导入后,都能自动地执行这个函数呢?


答案肯定的!PolarDB支持触发器功能,能在数据发生变更前或者变更后,自动运行某个函数。这正好符合我们期望的场

景。触发器的定义用CREATE TRIGGER命令,细节大家可以查看文档。


image.png


如上图所示,一个UDF要能被触发器调用,需要做一些简单的调整:1)返回结果不能是void,而需要改成TRIGGER;2)

在end之前,return一个null。然后用create trigger命令创建后置触发器,在每条插入flowers表的语句执行完之后,自动调用update_null_to_zero函数。


接下来我们演示一下。首先创建UDF:update_null_to_zero()。


image.png


创建好了之后,先手工调用一下,测试函数功能正常:


image.png


此时,原先是null的字段已经被更新成了0。接着,修改函数定义,变成触发器可调用的函数。


image.png


即返回类型是trigger,并且添加了return null语句,然后将其绑定到一个后置触发器上。


image.png


如上图所示,在清空表之后,用COPY重新导入,原先哪些导进来是空的数据自动变成了0,就说明触发器已经生效了!


5、过滤异常数据


除了前文提到的后置触发器(after trigger),触发器还有另外一种用法——前置触发器(before trigger)。顾名思义,后置触发器是在数据插入成功后执行,前置触发器是在数据插入之前执行。在前置触发器中,如果最终 return null 可以直接忽略该行数据;如果 return new,则能插入该行数据。因此,利用前置触发器,可以在数据被真正插入到数据库之前,过滤掉异常的数据。


image.png


例如上图所示,当鸢尾花的样本数据里四个特征全部是null,则认为是异常数据,可以直接忽略,看一下执行效果。

与后置触发器一样,也要先创建一个UDF作为触发器的handler:


image.png


接着将其绑定到前置触发器,然后再次清空表,并重新导入输入。


image.png


此时,只copy了150条数据,因为异常数据已经被自动被忽略。


image.png

《PolarDB for PostgreSQL源码与应用实战》——PolarDB for PostgreSQL用SQL做数据分析(5) https://developer.aliyun.com/article/1232905?groupCode=polardbforpg













相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
关系型数据库 MySQL 分布式数据库
[PolarDB实操课] 05.通过源码部署PolarDB-X标准版
本课程介绍如何通过源码部署PolarDB-X标准版,涵盖基于Paxos的MySQL三副本工作原理和技术特点。主要内容包括: 1. **Paxos三副本工作原理**:讲解Leader和Follower节点的角色及数据同步机制。 2. **技术特点**:强调高性能、数据不丢失(RPO=0)和自动HA切换。 3. **源码部署步骤**:详细演示从编译生成RPM包到启动DN节点的过程,包括配置my.cnf文件和初始化数据库。 4. **高可用体验**:通过三台机器模拟三副本集群,展示Leader选举和故障转移机制,确保数据一致性和服务可用性。
|
2月前
|
SQL 数据挖掘 数据库
这可能是最适合解决 SQL 数据分析痛点的编程语言
数据分析师常需处理各种数据操作,如过滤、分组、汇总等,SQL 在这些基本需求上表现得心应手。然而,面对本地文件数据或更复杂需求时,SQL 的局限性显现。SPL(Structured Process Language)则提供了更灵活的解决方案,无需数据库环境,直接从文件计算,代码简洁易懂,调试工具强大,极大提升了数据分析的效率和交互性。
|
1月前
|
关系型数据库 编译器 分布式数据库
PolarDB实操课] 04.通过源码部署PolarDB-X企业版
本次课程由PolarDB开源架构师王江颖分享,详细介绍了通过源码部署PolarDB-X企业版的全过程。主要内容包括: 1. **编译基础** 2. **使用源码编译部署PolarDB-X企业版** 3. **演示实例**:通过阿里云ECS进行实际操作演示,从创建用户、赋予权限到最终启动并连接PolarDB-X数据库,展示了完整的部署过程。 4. **总结**
|
6月前
|
SQL 关系型数据库 MySQL
linux 上源码编译安装 PolarDB-X
linux 上源码编译安装 PolarDB-X
280 6
linux 上源码编译安装 PolarDB-X
|
6月前
|
SQL 数据挖掘
7张图总结:SQL 数据分析常用语句!
7张图总结:SQL 数据分析常用语句!
107 8
|
5月前
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)
|
6月前
|
SQL 存储 关系型数据库
PostgreSQL核心之SQL基础学习
PostgreSQL核心之SQL基础学习
74 3
|
6月前
|
SQL 安全 关系型数据库
PostgreSQL SQL注入漏洞(CVE-2018-10915)--处理
【8月更文挑战第8天】漏洞描述:PostgreSQL是一款自由的对象关系型数据库管理系统,支持多种SQL标准及特性。存在SQL注入漏洞,源于应用未有效验证外部输入的SQL语句,允许攻击者执行非法命令。受影响版本包括10.5及更早版本等。解决方法为升级PostgreSQL
391 2
|
6月前
|
SQL 数据挖掘 关系型数据库
SQL中的聚合函数:数据分析的强大工具
【8月更文挑战第31天】
229 0
|
6月前
|
SQL 数据挖掘 Serverless
SQL 窗口函数简直太厉害啦!复杂数据分析的超强利器,带你轻松攻克数据难题,快来一探究竟!
【8月更文挑战第31天】在数据驱动时代,高效处理和分析大量数据至关重要。SQL窗口函数可对一组行操作并返回结果集,无需分组即可保留原始行信息。本文将介绍窗口函数的分类、应用场景及最佳实践,助您掌握这一强大工具。例如,在销售数据分析中,可使用窗口函数计算累计销售额和移动平均销售额,更好地理解业务趋势。
122 0

相关产品

  • 云原生数据库 PolarDB