微信号:infoqchina

介绍:有内容的技术社区媒体

Amazon Redshift支持用户自定义数据库函数;Twitter Diffy通过比较响应结果判断服务Bug

2015-10-04 08:33 Q新闻

1
Amazon Redshift
支持用户自定义数据库函数


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。


2
Twitter Diffy
通过比较响应结果判断服务Bug


近日,Twitter开源了Diffy,这是一个自动化测试工具,可用在生产环境中,旨在探测运行在Apache Thrift与其他HTTP服务器上的新代码所产生的潜在Bug。


Diffy不像预定义了每个部分代码有着独立的测试集合的单元测试工具,Diffy更像一个函数式测试工具,它针对整体web服务。Diffy充当代理接收HTTP请求,再把请求分发给两套服务,一个良好运行的,另一个是有潜在问题的。然后Diffy收集两者的响应作对比,给出代码的回归测试集。


很显然,有很多可能导致两套服务一定会有微小的差异,包括不同的时间戳、调用随机值生成器或者其他原因。为了避免这些差异引出的误报,Diffy运行了三套服务:两套运行着完全相同的正常版本的代码,另一套运行着全新的代码。除了不确定的噪音(时间戳、随机值等),两台相同实例的响应应该也是完全相同的。当和备用机比较响应的时候,这些不确定的噪音是要忽略的。经过对比找到噪音为何并排除其影响是避免误报的关键。


安全起见,Diffy默认忽略POST、PUT和DELETE操作,但是他们也可以被启用。


Diffy 用Scala编写而成,基于Apache 2.0协议开源,托管在GitHub。


版权归属InfoQ,禁止私自抄袭转载。

回复关键词React | 架构师 | 运维 | 云 | 开源 | 物联网 | Kubernetes | 架构 | 人工智能 | Kafka | Docker | Netty | CoreOS | QCon | Github | Swift | 敏捷 | 语言 | 程序员


今日文章推荐


我为什么不在新公司中使用Rails?

荐文|九月十篇精选干货技术文章

Oracle 裁减Java布道师员工

为动态移动应用创建Web API

我为何不在生产项目中转向Go?

投稿可勾搭:

邮箱:editors@cn.infoq.com

合作QQ:1073600161

 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 520告白日~撩妹新技能 如何用Web技术开发Windows Form应用 超给力!图文详解谷歌Android 7.0的20个新功能 回顾(北京)+预告(杭州) | 用BDD&DDD让遗留系统“慢鱼变快”WORKSHOP 应用多级缓存模式支撑海量读服务