簡體   English   中英

為什么我的python udf在redshift中返回空輸出?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM