hive UDF函数取最新分区
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函数取最新分区相关推荐
- hive udf 分组取top1_Hive分组取Top K数据
1.ROW_NUMBER,RANK(),DENSE_RANK() 语法格式:row_number() OVER (partition by COL1 order by COL2 desc ) rank ...
- hive udf 分组取top1_Hive中分组取前N个值的实现-row_number()
背景 假设有一个学生各门课的成绩的表单,应用hive取出每科成绩前100名的学生成绩. 这个就是典型在分组取Top N的需求. 解决思路 对于取出每科成绩前100名的学生成绩,针对学生成绩表,根据学科 ...
- hive UDF函数
虽然Hive提供了很多函数,但是有些还是难以满足我们的需求.因此Hive提供了自定义函数开发 自定义函数包括三种UDF.UADF.UDTF UDF(User-Defined-Function) UDA ...
- Impala UDF - Impala调用Hive UDF函数
Impala 中运行 Hive UDF 场景:部分查询需要快速返回,使用Impala进行快速.复杂的查询 1.简单的UDF函数过滤,判断是否包含"好"字,返回boolean类型 i ...
- Hive UDF 函数指南
精选30+云产品,助力企业轻松上云!>>> 点击蓝色"大数据每日哔哔"关注我 加个"星标",第一时间获取大数据架构,实战经验 Hive 内置了 ...
- 编写hive udf函数
大写转小写 package com.afan; import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.io.Text; ...
- CDH 创建Hive UDF函数
导入依赖包: hive-exec.jar hadoop-common.jar 注意:函数名必须为 evaluate ,否则hive无法识别! package com.example.hive.udf; ...
- hive udf 分组取top1_Hive的经典面试题
很久没有发文章了,今天发表一下Hive的总结,如果那里有不足的欢迎指正,顺便再提一个问题(数仓建模中:细化程度越高,粒度级就越小,相反,细化程度越低,粒度级就越大,这个说法能打个比方比喻出来吗?) 必 ...
- hive udf 分组取top1_项目实战从0到1之hive(27)数仓项目(九)数仓搭建 DWS 层
点击上方蓝字关注我们 一.数仓搭建 - DWS 层 1.1 业务术语 1)用户 用户以设备为判断标准,在移动统计中,每个独立设备认为是一个独立用户.Android 系统根据 IMEI 号,IOS 系统 ...
最新文章
- 今晚开播 | 人脸识别的最新进展以及工业级大规模人脸识别实践探讨
- spi时序图怎么分析,怎么看懂spi时序图
- dotnet core Linux下图片验证码解决方案
- 西部数码虚拟主机服务器配置,西部数码虚拟主机设置首页功能介绍
- 透明物体分割学习笔记
- java中,字符串和集合判断是否为空
- 将一张图片分割成多张小图片 Python3
- MSSQL-to-MySQL v5.3, 从MSSQL迁移到mySQL的最佳工具
- [Leetcode][第1025题][JAVA][除数博弈][数学][递推]
- java解析dxf文件_浅析JVM方法解析、创建和链接
- u8api openapi_使用OpenAPI规范进行更好的API测试
- Python项目实践:国家财政数据趋势演算
- 实际开发的存储过程_实际生产中的 Android SDK开发总结| 完结
- Windows 365 以明文形式暴露微软 Azure 凭据
- oracle 的逻辑结构设计,浅谈Oracle数据库逻辑结构
- 易会满重磅发声!新证券法将给资本市场带来哪些新变化?证监会职责定位有何新要求?...
- Python答题并统计的小程序
- word 多级列表标题设置
- linux服务器删除weblogic,linux weblogic安装和卸载
- T1-商贸宝 将辅助单位零售价更新为基本单位零售价*换算率
热门文章
- ggplot2箱式图两两比较_R绘图 第四篇:绘制箱图(ggplot2)
- openfoam安装中出现allmake error_如何更新OpenFOAM的版本?
- win7变成xp风格了怎么改回_XP退役了,如何把Win7变成XP风格
- 这个 bug 让我更加理解 Spring 单例了
- 双“11”搞促销?用贪心算法来盘他!
- 面试题:如何设计一个高并发的系统?
- 你必须知道的session与cookie
- Tensorflow中查看gpu是否可用
- 2s相机 android6,Android Camera2 使用总结
- 查找服务器大文件内容,Linux查找大文件命令,springmvc基础面试题