IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> hive 使用UDF函数生成流水号 -> 正文阅读

[大数据]hive 使用UDF函数生成流水号

流水号组成:

公司代码 + 日期(YYYYMMDD) + 10位流水,流水号是每天的流水号,每天都是从‘0000000001’开始。其中日期为上月最后一天日期。

1.UDF函数

首先建一个maven工程,在pom.xml导入依赖包

pom.xml

<dependencies>
        <!--添加hadoop依赖-->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>3.1.1</version>
        </dependency>
        <!--添加hive依赖-->
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>3.1.1</version>
        </dependency>
    </dependencies>

编写udf函数

?SerialNumber.java

import org.apache.hadoop.hive.ql.exec.UDF;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


public class SerialNumber extends UDF {

    IdBean t = new IdBean();
    StringBuffer buffer = new StringBuffer();


/*
* 公司代码+日期(YYYYMMDD)+10位流水,流水号是每天的流水号,每天都是从‘0000000001’开始。
* 其中日期为上报数据时当前的系统日期。*/


    public String evaluate(String bxjgdm){

        // 时间日期字符串处理(YYYYMMDD)
        Date date = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        //获取上个月月份
        calendar.add(Calendar.MONTH,-1);
        //获取上个月最大天数
        calendar.set(Calendar.DATE,calendar.getActualMaximum(Calendar.DATE));
        //获取上个月最后一天
        date = calendar.getTime();
        //指定时间格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        CharSequence dateStr = sdf.format(date);

        //若为string类型,则使用切割字符串: String dateStr = date.substring(0,8);

        int i = t.getNum();

        /*
        // 当时间字符串为输入参数时,需进行判断
        if (buffer.toString().contains(dateStr)){
            //获取每次 +1 的自增数
            i++;
        }else{
            // 将新日期加入到 buffer 中
            buffer.append(dateStr + ",");
            //将 i 重置为 1
            i = 1;
        }
        */
        //返回 i 的值
        i++;
        t.setNum(i);

        // 获取 0000000000 与 自增数 的拼接数字字符串
        String str = "0000000000" + i;

        // 取数字字符串后10位拼接为流水号
        String id = bxjgdm + dateStr + str.substring(str.length()-10);

        return id;
    }

    public static void main(String[] args) {
        SerialNumber number = new SerialNumber();
        String s = number.evaluate("000093");
        String d = number.evaluate("000093");
        String f = number.evaluate("000093");
        String g = number.evaluate("000093");
        System.out.println(s);
        System.out.println(d);
        System.out.println(f);
        System.out.println(g);
    }

}

使用Javabean进行计数

IdBean

public class IdBean {
    private int num = 0;

    public IdBean(){
        super();
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

}

2.项目打包上传并执行

在maven选项中clean ---> package ---> 复制target中的jar包到桌面 ---> 上传到Linux 上hive目录下 --->? 在hive环境添加jar包? ---> 创建相应函数? --->? 运行 ---> ok

//添加jar包到hive环境
add jar /opt/modules/hive-3.1.1/mylib/LiuShuiHao-1.0-SNAPSHOT.jar;

//创建临时函数
create temporary function Lsh as 'SerialNumber';


//测试执行
hive> select name,Lsh(birthday) from test01;
OK
张三    20211122202106300000000001
李四    20211123202106300000000002
王五    20211122202106300000000003
赵六    20211125202106300000000004
Jack    20211122202106300000000005
Tom     20211122202106300000000006
Li.see  20211127202106300000000007
John jeery      20211126202106300000000008
Time taken: 0.444 seconds, Fetched: 8 row(s)

udf具体操作:

https://blog.csdn.net/u010003835/article/details/81061563

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 00:08:15  更:2021-07-24 00:08:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 4:12:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码