首页 > 解决方案 > Redshift UDF 逻辑问题

问题描述

我正在尝试编写一个 redshift udf 来验证时间戳。但是,它总是返回 false。有人可以解释为什么吗?

create or replace function f_Is_timestamp_sql(VARCHAR(20000))
  returns timestamp  
  STABLE
as $$
       select $1::timestamp as a;
$$ language sql;

create or replace function f_Is_timestamp(val VARCHAR(20000))
  returns bool
IMMUTABLE 
as $$
    try:
       (f_Is_timestamp_sql(val));  
    except:
       return (1==2);
    else:
      return 1==1;
$$ language plpythonu;

select f_Is_timestamp('2019-10-09')

标签: amazon-web-servicesamazon-redshiftuser-defined-functions

解决方案


通读 AWS 文档后,我发现一个 UDF 不能引用另一个 UDF 的内容。 https://docs.aws.amazon.com/redshift/latest/dg/udf-python-language-support.html 因此,我的函数总是抛出异常。我想出了一种使用 python 库完成此任务的替代方法

dateutil.parser

下面的工作函数。

create or replace function f_Is_timestamp(val VARCHAR(20000))
  returns bool
IMMUTABLE 
as $$
    from dateutil.parser import parse;
    try:
        parse(val,ignoretz=True);
    except:
        return 1==2;
    else:
        return 1==1;
$$ language plpythonu;

推荐阅读