加载中…

加载中...

基于python的计算日期序列的udtf

转载 2016-06-06 18:45:11
标签:pythonudtf

1 pyodps:http://pyodps.readthedocs.io/zh_CN/latest/

2 udtf基础:https://cwiki.apache.org/confluence/display/Hive/DeveloperGuide+UDTF

3 udtf开发​

#-*- coding:utf8 -*-

from odps.udf import annotate

from odps.udf import BaseUDTF

import datetime

from datetime import timedelta

DATEFORMAT = '%Y%m%d'

@annotate('string,string->string,bigint')

class DateRangeUDTF(BaseUDTF):

def convert_date(self, date):

try:

date = datetime.datetime.strptime(date, DATEFORMAT)

return date.date()

except TypeError:

return date

def get_date(self, start, n):

return datetime.datetime.strftime(self.convert_date(start) + timedelta(days=n), DATEFORMAT)

def date_range(self, start, end):

days = (self.convert_date(end) - self.convert_date(start)).days + 1

if days <= 0:

raise ValueError('The start date must be before the end date.')

for n in xrange(0, days):

yield self.get_date(start, n)

def process(self, arg0, arg1):

start = arg0

end = arg1

i = 0

for t in self.date_range(start, end):

i += 1

self.forward(t, i)

4 实际应用

select rng.dt, rng.id 

from dual lateral view daterange_v1('20151010', '20151212') rng as dt, id

;


阅读(0) 评论(0) 收藏(0) 转载(0) 举报/Report

评论

重要提示:警惕虚假中奖信息
0条评论展开
相关阅读
加载中,请稍后
bicloud
  • 博客等级:
  • 博客积分:0
  • 博客访问:378,159
  • 关注人气:0
  • 荣誉徽章:

相关博文

推荐博文

新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有