错误: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:对于提前停止,评估需要至少一个数据集和评估指标

scipy 稀疏 A[:,0] = ndarray ValueError

BIRT在页面上展示xxxx年xx月xx日