amazon-web-services - 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')
解决方案
通读 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;
推荐阅读
- c# - 从 View 中的 ViewBag 列表中获取第一个值
- sql - 需要在我的过程中创建一个临时表,其中有一个游标
- php - 我想使用多表查询登录
- javascript - 防止子元素在子菜单项单击时触发父事件
- terraform - 那么 terraform 版本控制方案呢?
- wpf - 有没有办法在 WPF Core 中使用文件夹选择器(FolderBrowserDialog)?
- c# - 如何在网格视图中使用 ObjectDataSource?
- rubymotion - RubyMotion 新项目给出错误 dlopen(/Applications/Xcode.app/Contents/Developer/../Frameworks/libswiftCore.dylib, 2): image not found
- database - Esqueleto 只返回一列
- https - 如何将我的 Google 域与我的 Google Cloud DNS 关联?