编程语言
首页 > 编程语言> > python – 优化:Amazon Redshift功能,用于检查夏令时是否有效

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