python – 优化:Amazon Redshift功能,用于检查夏令时是否有效
作者:互联网
我写了这个连接到dateutil.tz的函数,请参考下面的代码:
CREATE OR REPLACE FUNCTION schema_name.fnc_name(ts timestamp without time zone, timezone character varying)
RETURNS boolean STABLE AS $$
from datetime import datetime
from dateutil.tz import gettz
tstz = ts.replace(tzinfo=gettz(timezone))
is_dst = datetime.timetuple(tstz).tm_isdst
return is_dst
$$LANGUAGE plpythonu;
这个函数很慢,我需要在执行周期中调用超过10亿行.
我真的很喜欢redshift和timezone的东西.有人可以帮我优化一下吗?
任何性能改进建议都值得赞赏,例如:
>以某种方式将时区详细信息移动到本地数据库? (告诉我怎么样)
>不要使用Python,使用别的东西(告诉我什么)
解决方法:
使用IMMUTABLE而不是STABLE,因为给定输入值,返回值将始终相同.从documentation:
STABLE: Given the same arguments, the function is guaranteed to return the same results for all rows processed within a single statement. The function can return different results when called in different statements. This category allows the optimizer to optimize multiple calls of the function within a single statement to a single call for the statement.
IMMUTABLE: Given the same arguments, the function always returns the same result, forever. When a query calls an
IMMUTABLE
function with constant arguments, the optimizer pre-evaluates the function.
此外,要启用Redshift缓存结果,请传入DATE而不是TIMESTAMP.这将减少使用的输入值的数量,以便它们更可能使用先前计算的(和缓存的)值.
标签:python,function,sql,query-optimization,amazon-redshift 来源: https://codeday.me/bug/20190608/1200773.html