等待Redshift用户定义功能的时刻终于结束了。AWS宣布了支持基于Python 2.7的用户定义功能,允许开发者在SQL语句的使用中部署自定义的功能。
在数据库中使用用户自定义功能(UDF)可以简化对数据的操作以及有助于标准计算的执行。没有UDF,某些计算必须在数据库以外执行。这可能会导致在提取,转换和加载(ETL)的过程中实现代码的碎片化,以及将数据下载后再在Excel电子表格中进行计算。UDF允许亚马逊Redshift数据仓库的用户调用功能,并能够在数据库查询的上下文中对数据进行计算。
Python是UDF语言的一个必然选择。它被广泛使用,易于学习,并有大量能够实现数据处理和分析功能的库。除了使用Python核心功能之外,亚马逊Redshift的开发者还可以使用Python的标准库,它支持字符串,数据类型、压缩、XML和国际化。
数据科学家和其他数据分析师会乐于见到对NumPy,SciPy和Pandas库的支持。NumPy、SciPy提供高性能的数学例程;Pandas是另一个支持数据分析和建模的高性能工具。Redshift的用户也可以导入他们自定义的 Python模块。导入的步骤在UDF文档中有详细的描述。
提高Python的性能
Python是一种解释性语言,其性能会比编译的代码慢。如果有一个现成的SQL功能可以来执行特定的任务,那么它多半会比一个实现相同功能的Python脚本更快。除非使用像NumPy和SciPy之类的包实现优化的,编译后的代码可以让Python程序直接用;这种优化后的包应该会比直接解释Python的性能更好。当你需要执行一个计算密集型的运算时,你应该先检查NumPy和SciPy有没有现成的功能,而不是直接自己创建一个。即使那些库没有完全满足你需要的东西,也可能有一些优化的功能可以用来改善你的运算。
提高你的Python代码的性能的方法之一是指定功能可变性的最低级别。可变功能在相同的参数下可以返回不同的结果。在这种情况下,编译器可以做出一些优化假设。Redshift的数据仓库支持三种可变性级别:可变,稳定和不变。不变功能总是返回相同类型的结果,并且最有可能被优化。稳定功能对一条语句中处理的所有行返回相同的结果,而可变功能在每次调用时可能返回不同的结果,即便我们传递的参数相同。
Python在并行处理方面也有众所周知的局限性,但在Redshift中运行时这些都不是问题。Redshift数据库会管理所有的Python代码并在分区中运行,就有如SQL代码能够在分区间运行一样。Redshift数据仓库会管理所有的并行处理并避免那些可能会在Python并行程序中出现的瓶颈。
Redshift同Python的数据映射和安全权限对比
Redshift的数据类型可以映射到Python中很明显的对应类型。Redshift的几个数据类型,包括“integer”,“smallint”,“bigint”,“short”和“long”映射到Python的“int”类型。Redshift的“decimal”和“numeric”数据类型映射到Python的“decimal”类型,而Redshift的“double”和“real”数据类型映射到Python的“float”数据类型。
Redshift的“boolean”数据类型映射到Python的“bool”,“char”和“varchar”则映射到“string”,而“timestamp”则相当于Python的“datetime”数据类型。“ANYELEMENT”这个多态的数据类型在利用Python动态类型系统的优势时很有用。牢记这些映射很重要,因为你需要指定参数并返回Redshift的数据类型值,而不是Python的数据类型。
要使用用户定义功能我们必须先设立一组所需的权限。用户必须拥有Python语言的USAGE权限才能创建UDF。一旦创建完,只有所有者和超级用户才可以执行它们。管理员必须明确授予权限给其他的终端用户才能运行那些不是他们创建的UDF。只有所有者或超级用户可以更新或删除一个UDF。
Redshift数据仓库会基于合理的安全考虑而限制某些操作。例如,用户定义功能不能保存文件或访问网络。除了安全相关的约束之外,还有更多操作方面的限制。用户安装的库最大不能超过100MB。UDF还受制于工作负载管理规则,如果达到最大并发数的话,UDF就必须进入队列等待之后运行。
亚马逊建议在你的UDF名称前加上f_的前缀。亚马逊为UDF预留了f_的前缀,并且未来不会让任何Redshift功能使用这个前缀。这个命名规则是为了防止UDF和Redshift自定义功能间的命名冲突。
Redshift的UDF有一些限制,但其简化数据管理和分析的好处使它们成为一个大受欢迎的数据仓储服务附加功能。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
Dan Sullivan是一名作家、系统架构师和顾问,拥有超过20年关于先进的分析、系统架构、数据库设计、企业安全、商业智能的IT从业经验。他的从业范围广泛,包括金融服务业、制造业、医药、软件开发、政府、零售、天然气和石油生产、发电、生命科学和教育。