阿里云DataWorks开发UDF函数,自定义一周开始时间

今天使用阿里云套件quick bi开发一个报表,需求是自定义上周六到本周五为自然周来统计周指标,常规日期函数已经不能满足此需求,需自定义UDF函数来实现,具体解决过程如下。

知识储备:

我们知道hive有一个日期转周函数:weekofyear
语法: weekofyear (string date)
返回值: int
说明:返回日期在当前的周数,默认周一是一周的开始。
举例:
hive> select weekofyear('2020-12-29')
53

此需求的核心就是重写weekofyear这个方法,传入参数周六作为一周的开始时间,周五就作为结束时间,有了这个思路我们就开始自定义UDF函数。
笔者使用的是阿里云的DataWorks一站式开发平台,代码开发工具是Idea,下面详细介绍实现过程:

1、创建maven项目
新建maven项目
2、pom.xml导入阿里云依赖

阿里云依赖

    <dependencies>
        <dependency>
            <groupId>com.aliyun.odps</groupId>
            <artifactId>odps-sdk-udf</artifactId>
            <version>0.29.10-public</version>
        </dependency>
    </dependencies>

3、继承UDF,重写evaluate方法,写入核心逻辑
在这里插入图片描述

    public String evaluate(Date s, String firstDayOfWeek) {
        LocalDate localDate = LocalDateTime.ofInstant(s.toInstant(), ZoneId.systemDefault()).toLocalDate();
        WeekFields weekFields = WeekFields.of(DayOfWeek.of(Integer.parseInt(firstDayOfWeek)), 4);
        return String.format("%04d-%02d", localDate.get(weekFields.weekBasedYear()), localDate.get(weekFields.weekOfWeekBasedYear()));
    }

4、本地测试,测试时间为2023-06-26,假如周六作为一周的开始,则是本年第26周测试
6、打包
在这里插入图片描述
7、以下步骤在dataworks完成,选择项目空间后,在资源处新建jar,并上传jar包
在这里插入图片描述
8、注册函数
在这里插入图片描述
9、使用
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值