zoukankan      html  css  js  c++  java
  • 关于aws当中的redshift自定义函数的部署和创建(UDF)

    今天在做的时候碰到,如果一个字符串是日期时间类型,但是他的这种形式是错误的,就比如:2019-02-31 

    我们都知道2月份是没有31号的,所以我们要给日期附一个默认值。或者因为数据库当中的使用了varchar的类型随心所欲的乱写

    各种各样的数据都有。这对于数据清洗是一件非常麻烦的事情。所以我们写一个函数,对于这种的如果是日期的就正常返回日期,如果不是的话就返回

    一个默认的日期给他。redshift的自定义函数的形式如下:

    --判断是不是时间戳,返回数据
    CREATE or replace  FUNCTION  f_py_is_valid_timestamp (a varchar) RETURNS  varchar
        IMMUTABLE as $$
        import time
        from datetime import datetime
        def is_valid_timestamp(strdate):
    				try:
    					if ":" in strdate:
    						if(len(strdate)==23):
    						    return str((datetime.strptime(strdate, '%Y-%m-%d %H:%M:%S.%f')))
    						else:
    						    return str((datetime.strptime(strdate, '%Y-%m-%d %H:%M:%S')))
    					elif(len(strdate)==13):
    							s2 = round(int(strdate)/ 1000 - 28800)
    							timeArray = time.localtime(s2)
    							return str(time.strftime("%Y-%m-%d %H:%M:%S", timeArray))
    					elif (len(strdate) == 14):
    						b = '%s-%s-%s %s:%s:%s' % (strdate[0:4], strdate[4:6], strdate[6:8], strdate[8:10], strdate[10:12], strdate[12:16])
    						return str(datetime.strptime(b, '%Y-%m-%d %H:%M:%S'))
    				except Exception:
    					return '1900-01-01 00:00:00'
        return 	is_valid_timestamp(a)
    $$ LANGUAGE plpythonu;

      上面自定义的udf当中,我们采用的Python脚本的形式自定义的函数。在两个$符号的中间就是一段Python代码。写好这个之后就在可以在redshift的客户端界面执行以下这个函数

     需要注意的问题:

         (1)自定义函数当行Python的换行和空格符号(一定要注意否则一直报错)

         (2)在用Python写好函数之后一定要与返回值 return is_valid_timestamp(a) 这样函数才会起作用

         (3)创建的这个自定义的函数其实是以存储过程的形式存在,在创建这个函数的时候也可以指定函数创建的库名字。如下:

        

           CREATE or replace FUNCTION 数据库库名字.f_py_is_valid_timestamp (a varchar) RETURNS varchar
    

      

     至此redshift的自定义函数就设置好了。

      

  • 相关阅读:
    Git实战(二)原理

    Java实现 蓝桥杯 历届试题 核桃的数量
    Java实现 蓝桥杯 历届试题 核桃的数量
    Java实现 蓝桥杯 历届试题 核桃的数量
    Java实现 蓝桥杯 历届试题 核桃的数量
    Java实现 蓝桥杯 历届试题 核桃的数量
    Java实现蓝桥杯 历届试题 k倍区间
    Java实现蓝桥杯 历届试题 k倍区间
    Java实现蓝桥杯 历届试题 k倍区间
  • 原文地址:https://www.cnblogs.com/gxgd/p/11276837.html
Copyright © 2011-2022 走看看