@lsmn
2015-09-15T20:21:40.000000Z
字数 1480
阅读 2738
数据库
亚马逊
Amazon
Redshift
Python
Amazon Redshift是一个完全托管的PB级数据仓库,使企业可以用一种经济的方式轻松分析其所有数据。近日,亚马逊云计算战略师Jeff Barr宣布,Amazon Redshift新增标量用户定义函数(UDFs)支持,允许用户使用Python 2.7定义可以在数据仓库中运行的非SQL数据处理代码。
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标准库和若干其它的库,如:
另外,Jeff指出,Amazon Redshift UDFs在一个完全隔离的容器中运行。也就是说,UDFs不会破坏集群或对性能产生负面影响。而且,这些自定义函数还无法写文件或访问网络。因此,它们非常安全。
要了解更多有关UDFs的信息,请查阅官方文档或者由APN合作伙伴Looker提供的UDFs指南。另一家APN合作伙伴Periscope已经创建并发布了一些有用的标量UDFs。在接下来的两周内,亚马逊将分区域升级现有Amazon Redshift集群,升级后的集群版本是1.0.991。