[英]Why is my python udf returning empty output in redshift?
我有一個表,其中的列包含具有different_formats的datetime值-毫秒,不毫秒,零填充,零填充。 我需要使用該數據來計算時間間隔。 因此,我編寫了python UDF功能並嘗試在查詢中調用它。 但是我在表上調用時得到空值,而在用字符串調用時得到錯誤。 我的UDF函數是:
create or replace function everyonesdb.validateDate(tzDate varChar)
returns varchar
stable
as $$
from datetime import datetime
try:
return datetime.strftime(datetime.strptime(tzDate,'%Y-%m-%d %H:%M:%S:%f %z'),'%Y-%m-%d %H:%M:%S %z')
except ValueError:
pass
$$ language plpythonu;
我這樣稱呼它:
Select validateDate('2018-04-19 09:29:52 +1000')
我得到的錯誤:
[Amazon](500310) Invalid operation: function validatedate("unknown") is not unique;
我也在我的查詢中嘗試過。 有了這個我只會得到空值。
SELECT DISTINCT date_time_tz,
validateDate(date_time_tz) from table1
O / P:
date_time_tz validatedate
2018-04-19 12:37:33:359 +0800
2018-04-19 10:23:27:492 +1000
2018-04-19 11:02:58:810 +1000
2018-04-19 09:39:42:820 +1000
2018-04-19 10:30:18:017 +0530
2018-04-19 16:14:49:581 +1000
這是我第一次嘗試Python UDF。 任何幫助將不勝感激。
在
validateDate('2018-04-19 09:29:52 +1000')
由於某種原因,該字符串不能被識別為varchar(可能是SQL和Python之間的數據類型映射)。 嘗試明確指定數據類型以避免該問題
validateDate('2018-04-19 09:29:52 +1000'::varchar)
在查詢中,您在datetime上使用該函數,看起來它接受datetime作為varchar參數,但是代碼引發異常並在pass
行上結束,返回null。 嘗試對第二個查詢執行相同的操作(添加::varchar
)
這對我有用,請根據需要進行修改。 不確定到底是什么問題。
CREATE OR REPLACE FUNCTION f_validate_date(tz_date VARCHAR(50))
RETURNS TIMESTAMP
STABLE
AS $$
if tz_date is None:
return None
else:
from datetime import datetime
dtm = datetime.strptime(tz_date,'%Y-%m-%d %H:%M:%S:%f')
return dtm
$$ LANGUAGE plpythonu
;
結果
SELECT f_validate_date('2018-05-01 18:18:00:000');
f_validate_date
---------------------
2018-05-01 18:18:00
或者,您也可以采用老式的方法。 它速度更快,但不像分號毫秒分隔符。
SELECT '2018-05-01 18:18:00.000'::TIMESTAMP;
timestamp
---------------------
2018-05-01 18:18:00
--Leading zeroes
SELECT '0002018-05-01 18:18:00.000'::TIMESTAMP;
timestamp
---------------------
2018-05-01 18:18:00
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.