hive UDF函数取最新分区

1.pom文件

<dependencies><!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec --><dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>1.2.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.7.6</version><exclusions><exclusion><groupId>log4j</groupId><artifactId>log4j</artifactId></exclusion><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion></exclusions></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>test</scope></dependency></dependencies><build><pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.0</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.2</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><filters><filter><artifact>*:*</artifact><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*/RSA</exclude></excludes></filter></filters></configuration></execution></executions></plugin></plugins></pluginManagement></build>
</project>

2.代码

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileUtil;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hive.ql.exec.UDF;import java.net.URI;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;/**
* 该UDF函数取表最新分区,通过文件检索以降低能耗
*  参数 tableName :schema.table_name
*  返回  latesttPatition:最新分区名称
*/public class latest_partition extends UDF {public String evaluate(String tableName) {StringBuffer sb = new StringBuffer();String latesttPatition = null;// 获取shemaString split1 = tableName.split("\\.")[0];// 获取table_nameString split2 = tableName.split("\\.")[1];// 拼接路径String fileName = sb.append("/user/hive/warehouse/").append(split1).append(".db/").append(split2).toString();try{// 调用方法获取最新分区latesttPatition = getFileList(fileName);}catch (Exception e){System.out.println("获取结果异常" +e.getMessage());}return latesttPatition;}// 获取最新分区public static String getFileList(String path) throws Exception{String res = null;Configuration conf=new Configuration(false);conf.set("fs.default.name", "hdfs://hacluster/");FileSystem hdfs = FileSystem.get(URI.create(path),conf);FileStatus[] fs = hdfs.listStatus(new Path(path));Path[] listPath = FileUtil.stat2Paths(fs);List<String> list = new ArrayList();for(Path p : listPath){String s = p.toString();// hdfs上有可能有非分区文件,只处理分区文件if(s.contains("=")) {String partition = s.split("=")[1];list.add(partition);}}if(list.size() != 0) {res = Collections.max(list).toString();}return  res;}}

大表查询最新分区往往由于各种原因,可能需要几个小时,使用该函数可以实现秒级返回数据。性能可大范围提升。

-- 优化前sql查询语句(耗时特别久,全表扫描)
SELECT MAX(dt) as latest_dt FROM table_name;
-- 优化后(通过文件系统查询,数秒返回结果)
SELECT LST_DT('schema.table_name');

hive UDF函数取最新分区相关推荐

  1. hive udf 分组取top1_Hive分组取Top K数据

    1.ROW_NUMBER,RANK(),DENSE_RANK() 语法格式:row_number() OVER (partition by COL1 order by COL2 desc ) rank ...

  2. hive udf 分组取top1_Hive中分组取前N个值的实现-row_number()

    背景 假设有一个学生各门课的成绩的表单,应用hive取出每科成绩前100名的学生成绩. 这个就是典型在分组取Top N的需求. 解决思路 对于取出每科成绩前100名的学生成绩,针对学生成绩表,根据学科 ...

  3. hive UDF函数

    虽然Hive提供了很多函数,但是有些还是难以满足我们的需求.因此Hive提供了自定义函数开发 自定义函数包括三种UDF.UADF.UDTF UDF(User-Defined-Function) UDA ...

  4. Impala UDF - Impala调用Hive UDF函数

    Impala 中运行 Hive UDF 场景:部分查询需要快速返回,使用Impala进行快速.复杂的查询 1.简单的UDF函数过滤,判断是否包含"好"字,返回boolean类型 i ...

  5. Hive UDF 函数指南

    精选30+云产品,助力企业轻松上云!>>> 点击蓝色"大数据每日哔哔"关注我 加个"星标",第一时间获取大数据架构,实战经验 Hive 内置了 ...

  6. 编写hive udf函数

    大写转小写 package com.afan; import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.io.Text; ...

  7. CDH 创建Hive UDF函数

    导入依赖包: hive-exec.jar hadoop-common.jar 注意:函数名必须为 evaluate ,否则hive无法识别! package com.example.hive.udf; ...

  8. hive udf 分组取top1_Hive的经典面试题

    很久没有发文章了,今天发表一下Hive的总结,如果那里有不足的欢迎指正,顺便再提一个问题(数仓建模中:细化程度越高,粒度级就越小,相反,细化程度越低,粒度级就越大,这个说法能打个比方比喻出来吗?) 必 ...

  9. hive udf 分组取top1_项目实战从0到1之hive(27)数仓项目(九)数仓搭建 DWS 层

    点击上方蓝字关注我们 一.数仓搭建 - DWS 层 1.1 业务术语 1)用户 用户以设备为判断标准,在移动统计中,每个独立设备认为是一个独立用户.Android 系统根据 IMEI 号,IOS 系统 ...

最新文章

  1. 今晚开播 | 人脸识别的最新进展以及工业级大规模人脸识别实践探讨
  2. spi时序图怎么分析,怎么看懂spi时序图
  3. dotnet core Linux下图片验证码解决方案
  4. 西部数码虚拟主机服务器配置,西部数码虚拟主机设置首页功能介绍
  5. 透明物体分割学习笔记
  6. java中,字符串和集合判断是否为空
  7. 将一张图片分割成多张小图片 Python3
  8. MSSQL-to-MySQL v5.3, 从MSSQL迁移到mySQL的最佳工具
  9. [Leetcode][第1025题][JAVA][除数博弈][数学][递推]
  10. java解析dxf文件_浅析JVM方法解析、创建和链接
  11. u8api openapi_使用OpenAPI规范进行更好的API测试
  12. Python项目实践:国家财政数据趋势演算
  13. 实际开发的存储过程_实际生产中的 Android SDK开发总结| 完结
  14. Windows 365 以明文形式暴露微软 Azure 凭据
  15. oracle 的逻辑结构设计,浅谈Oracle数据库逻辑结构
  16. 易会满重磅发声!新证券法将给资本市场带来哪些新变化?证监会职责定位有何新要求?...
  17. Python答题并统计的小程序
  18. word 多级列表标题设置
  19. linux服务器删除weblogic,linux weblogic安装和卸载
  20. T1-商贸宝 将辅助单位零售价更新为基本单位零售价*换算率

热门文章

  1. ggplot2箱式图两两比较_R绘图 第四篇:绘制箱图(ggplot2)
  2. openfoam安装中出现allmake error_如何更新OpenFOAM的版本?
  3. win7变成xp风格了怎么改回_XP退役了,如何把Win7变成XP风格
  4. 这个 bug 让我更加理解 Spring 单例了
  5. 双“11”搞促销?用贪心算法来盘他!
  6. 面试题:如何设计一个高并发的系统?
  7. 你必须知道的session与cookie
  8. Tensorflow中查看gpu是否可用
  9. 2s相机 android6,Android Camera2 使用总结
  10. 查找服务器大文件内容,Linux查找大文件命令,springmvc基础面试题