Amazon Redshift 是一个完全托管的 PB 级数据仓库,使企业可以用一种经济的方式轻松分析其所有数据。近日,亚马逊云计算战略师 Jeff Barr 宣布,Amazon Redshift 新增标量用户定义函数(UDFs)(类似Amazon Redshift 内置函数 ROUND
、SUBSTRING
)支持,允许用户使用 Python 2.7 定义可以在数据仓库中运行的非 SQL 数据处理代码。
据 Amazon Web Service 医疗和生命科学解决方案架构师 Christopher Crosbie介绍,Python 非常适合数据操作和分析,但作为一种解释型语言,它在消费大型数据仓库的数据时存在瓶颈,主要是在多个进程之间分配工作负载非常复杂。而在 Amazon Redshift 中,这种问题就不存在了,Python 会像普通 SQL 查询一样并发执行,所以 Amazon Redshift 可以充分利用集群中的所有 CPU 内核执行 UDFs。另一方面,有了 Python UDFs,用户就可以充分利用 Python 的特性,Python 代码可以嵌入 SQL 语句,同 SQL 语句一起执行。
下面让我们看下 Jeff 举的例子,使用 UDF 简化复杂操作。
提取 URL 中的主机名可以使用如下正则表达式:
SELECT REGEXP_REPLACE(url, '(https?)://([^@]*@)?([^:/]*)([/:].*|$)', ‘\3') FROM table;
而如果用户引入一个 Python URL 解析库 URLParse,那么他就可以创建如下函数提取主机名:
CREATE FUNCTION f_hostname(url VARCHAR) RETURNS varchar IMMUTABLE AS $$ import urlparse return urlparse.urlparse(url).hostname $$ LANGUAGE plpythonu;
如此一来,上述 SQL 代码就可以简化为:
SELECT f_hostname(url) FROM table;
可以看出,用户除了可以自定义函数外,还可以利用 Python 库中现有的函数处理在 SQL 中不易表达的操作。用户甚至可以从 S3 和 Web 上添加自定义库。实际上,Amazon Redshift UDFs 已经集成了 Python 标准库和若干其它的库,如:
- NumPy 和 SciPy :提供用于创建多维对象、操作矩阵的数学工具;
- Pandas :基于 NumPy 和 SciPy 提供高级的数据操作工具;
- Dateutil 和 Pytz :简化日期和时区数据操作。
另外,Jeff 指出,Amazon Redshift UDFs 在一个完全隔离的容器中运行。也就是说,UDFs 不会破坏集群或对性能产生负面影响。而且,这些自定义函数还无法写文件或访问网络。因此,它们非常安全。
要了解更多有关 UDFs 的信息,请查阅官方文档或者由APN 合作伙伴 Looker 提供的 UDFs 指南。另一家 APN 合作伙伴 Periscope 已经创建并发布了一些有用的标量UDFs。在接下来的两周内,亚马逊将分区域升级现有Amazon Redshift 集群,升级后的集群版本是1.0.991。
感谢郭蕾对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。
立即免费注册 AWS 账号,获得 12 个月免费套餐:点击注册
有云计算问题?立刻联系 AWS 云计算专家:立即联系
活动推荐:
2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。
评论