错误:XX000:ValueError:需要一个日期时间对象。请查看 svl_udf_log 了解更多信息
Posted
技术标签:
【中文标题】错误:XX000:ValueError:需要一个日期时间对象。请查看 svl_udf_log 了解更多信息【英文标题】:ERROR: XX000: ValueError: Expected a datetime object. Please look at svl_udf_log for more information 【发布时间】:2019-04-24 12:16:23 【问题描述】:我在 redshift 中创建了 python UDF,用于检查我的数据是否具有有效的日期条目(如果不返回 NULL)。
UDF 已成功创建,但是当我将值传递给函数时,它的抛出错误。
Python 代码在 Google colab 中运行良好。但不是红移
CREATE OR REPLACE FUNCTION public.fn_isdate(date_text character varying)
RETURNS timestamp without time zone
stable
as $$
import datetime
def validate(dt):
try:
ti = datetime.datetime.strptime(dt,'%m/%d/%Y')
return ti.strftime('%m/%d/%Y')
except TypeError:
return None
except ValueError:
try:
ti = datetime.datetime.strptime(dt, '%Y-%m-%d')
return ti.strftime('%m/%d/%Y')
except ValueError:
return None
return validate(date_text)
$$ language plpythonu;
我希望 12/22/2003
对此 - SELECT public.fn_isdate('2003-12-22');
和
NULL
这个 - SELECT public.fn_isdate('03-12-22');
【问题讨论】:
我的回答有帮助吗? 【参考方案1】:你声明你的函数返回timestamp without time zone
,然后你返回一个python string
。
不将日期转换为字符串就可以了:
CREATE OR REPLACE FUNCTION sbochniak.fn_isdate(date_text character varying)
RETURNS timestamp without time zone
stable
as $$
import datetime
def validate(dt):
try:
ti = datetime.datetime.strptime(dt,'%m/%d/%Y')
return ti
except TypeError:
return None
except ValueError:
try:
ti = datetime.datetime.strptime(dt, '%Y-%m-%d')
return ti
except ValueError:
return None
return validate(date_text)
$$ language plpythonu;
然后:
SELECT
sbochniak.fn_isdate('2003-12-22') as a,
sbochniak.fn_isdate('03-12-22') as b;
返回:
a b
2003-12-22 00:00:00.000000 <NULL>
【讨论】:
以上是关于错误:XX000:ValueError:需要一个日期时间对象。请查看 svl_udf_log 了解更多信息的主要内容,如果未能解决你的问题,请参考以下文章
Amazon Redshift 错误:XX000:清单文件的 json 格式不正确。请告诉我哪里错了
xx000 can not wait without a pgproc
xx000 can not wait without a pgproc
LightGBM 错误:ValueError:对于提前停止,评估需要至少一个数据集和评估指标