2017-06-20 16 views
0

複雑なタイプのAWS UDFを作成する機能が必要です。 AWS UDF本体パートはPython言語をサポートします。私はPythonでボディーパーツ関数を作成しました。この関数はうまく機能します。しかし、AWS redshiftで次のコードを実行したところ、エラーメッセージが表示されました。複雑なタイプのAWS Redshift UDFを作成することができます

create or replace function Date(EffDt varchar,EffDt varchar) 
    RETURNS VARCHAR STABLE AS $$ 
    from dateutil.parser import parse 
    import datetime 
    from datetime import timedelta 
    if len(EffDt)>0 and len(Pay)>0: 
     dt=parse(EffDt) 
     if dt.month and dt.day==1: 
      NewDate=dt 
     else: 
      if Pay=="Weekely": 
        value=datetime.date(dt.year, dt.month, dt.day).weekday() 
        if value==1: 
         NewDate= dt + timedelta(days=1) 
        elif value==2: 
         NewDate = dt 
        elif value==3: 
        NewDate=dt+timedelta(days=6) 
        elif value==4: 
         NewDate=dt+timedelta(days=5) 
        elif value==5: 
        NewDate=dt+timedelta(days=4) 
        elif value==6: 
        NewDate=dt+timedelta(days=3) 
        elif value==7: 
        NewDate=dt+timedelta(days=2) 
        else : 
        pass 
      if Pay=="Monthly": 
       strvalue=dt.strftime('%Y/%m/%d') 
       if strvalue[:2]=="15": 
       strDate=str(dt.month)+"/16/"+str(dt.year) 
       NewDate=parse(strDate) 
       elif strvalue[:3]=="01": 
       NewDate=dt 
       else : 
       strDate=str(dt.month+1)+"/01/"+str(dt.year) 
       NewDate=parse(strDate) 
    else : 
     NewDateValue="1/1/1990" 
     NewDate=parse(NewDateValue) 
    mm=NewDate.month 
    yyyy=NewDate.year 
    print(yyyy) 
    if len(str(mm))==1: 
     mm="0"+str(mm) 
    dd=NewDate.day 
    if len(str(dd))==1: 
     dd="0"+str(dd) 
    _date=str(yyyy) +str(mm)+str(dd) 
    return _date 
$$ LANGUAGE plpythonu; 
+0

エラーは何ですか? – Ray

+0

メッセージ エラー:XX000:udfをコンパイルできませんでした。 – raj

答えて

0

私は私のために、このproblem.Followingコード作業を解決した

CREATE OR REPLACE FUNCTION abc(EffDt character varying, Pay character varying) 
RETURNS character varying AS 

def payDate(EffDt,Pay): 
    from dateutil.parser import parse 
    import datetime 
    from datetime import timedelta 
    if len(EffDt)>0 and len(Pay)>0: 
     dt=parse(EffDt) 
     if dt.month and dt.day==1: 
      print(dt.month) 
      print(dt.day) 
      NewDate=dt 
     else: 
      if Pay=="Weekely": 
        value=datetime.date(dt.year, dt.month, dt.day).weekday() 
        print(value) 
        if value==1: 
         NewDate= dt + timedelta(days=1) 
        elif value==2: 
         NewDate = dt 
        elif value==3: 
        NewDate=dt+timedelta(days=6) 
        print(NewDate) 
        elif value==4: 
         NewDate=dt+timedelta(days=5) 
        elif value==5: 
        NewDate=dt+timedelta(days=4) 
        elif value==6: 
        NewDate=dt+timedelta(days=3) 
        elif value==7: 
        NewDate=dt+timedelta(days=2) 
        else : 
        pass 
      if Pay=="Monthly": 
       strvalue=dt.strftime(''%Y/%m/%d'') 
       if strvalue[:2]=="15": 
       strDate=str(dt.month)+"/16/"+str(dt.year) 
       NewDate=parse(strDate) 
       elif strvalue[:3]=="01": 
       NewDate=dt 
       else : 
       strDate=str(dt.month+1)+"/01/"+str(dt.year) 
       NewDate=parse(strDate) 
       print(NewDate) 

    else : 
     NewDateValue="1/1/1990" 
     NewDate=parse(NewDateValue) 


    mm=NewDate.month 
    yyyy=NewDate.year 
    print(yyyy) 
    if len(str(mm))==1: 
     mm="0"+str(mm) 
    dd=NewDate.day 
    if len(str(dd))==1: 
     dd="0"+str(dd) 
    _date=str(yyyy) +str(mm)+str(dd) 
    print(yyyy) 
    print(mm) 
    print(dd) 
    return _date 

return payDate(EffDt, Pay) 
LANGUAGE plpythonu STABLE; 
+0

と何が問題でしたか? –

+0

投稿の質問でdef defDate()関数がありません – raj

関連する問題