![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
hive
文章平均质量分 53
hive基础及实战分享
浮云6363
这个作者很懒,什么都没留下…
展开
-
【presto】行转列和列转行
行转列数据源:select * from test.tmp_row_to_col;568810800017635002 210100026066367206568810800017635002 210100026070369019568810800017635002 210100026038823395568810800017635002 210100026038921817568811800170738001 210100016048730468568811800170738001原创 2022-05-03 16:59:48 · 8765 阅读 · 1 评论 -
hive的craete table as
Create Table As Select (CTAS)hive中还可以通过一个 create-table-as-select (CTAS) 语句中的查询结果来创建和填充表。 CTAS 创建的表是原子的,这意味着在填充所有查询结果之前,其他用户看不到该表。 因此,其他用户要么看到包含完整查询结果的表,要么根本看不到该表。CTAS 中有两个部分,SELECT 部分可以是 HiveQL 支持的任何 SELECT 语句。 CTAS 的 CREATE 部分从 SELECT 部分获取结果模式,并使用其他表属性(原创 2022-04-22 23:39:45 · 5175 阅读 · 0 评论 -
误删hive表如何恢复
CDH环境,已配置回收站,配置回收站默认日期保存为一天失误将hive表数据删除,删除的数据移动到了回收站中,位于/user/hive/.Trash/删除日期XXX/hive/warehouse数据库名.db/表名 先查看表名文件中是否是删除的表hdfs dfs -ls /user/hive/.Trash/Currerrt/user/hive/warehouse/数据库据库名.db | grep 表名对于有分区的表,额外执行msck repair table 数据库.表名对于该表有权限管理原创 2022-04-05 21:32:29 · 2314 阅读 · 0 评论 -
hive修改表路径
hive分为内部表和外部表,两种表修改路径方式不一样。内部表设置新的路径alter table tb_table1 set location 'hdfs://cluster/hive/warehouse/test.db/tb_table2移动表的文件hdfs dfs -mv /hive/warehouse/test.db/tb_table1 /hive/warehouse/test.db/tb_table2外部表因为外部表删除表并不会删除文件,所以可以先删除表drop table tab原创 2021-10-31 16:54:19 · 5596 阅读 · 0 评论 -
hive窗口函数order by不同引擎对于null的排序规则
目录发现问题分析问题解决问题发现问题今天发现一个问题,在Hive中使用窗口函数对数据进行分组排序时,使用mr引擎和使用presto引擎得到的结果不一致,在这里把发现和解决问题的过程记录一下。1. 首先模拟数据:创建表create table demo_over_order( room_id string comment '直播间ID' ,user_id string comment '用户ID' ,in_time string comment '进入时间' ,o转载 2021-05-30 21:15:36 · 1588 阅读 · 0 评论 -
【hive】hive如何将Jan 1, 2021 12:40:46 PM时间格式转换为指定格式
在开发过程中,遇到类似于Jan 1, 2021 12:40:46 PM,Jan 1, 2021 9:40:46 AM,需要转换为yyyy-MM-dd HH:mm:ss格式,特记录下。思路:先通过unix_timestamp函数将以上格式转换为时间戳再通过from_unixtime转换为指定的时间格式需要注意的: 首先要判断后缀是PM还是AM,如果是AM直接按上面两步转换即可,如果是PM且小时为12时,直接按上面两步转换即可,如果不为12时,在转换为时间戳后加上12*3600(即加12小时),再进原创 2021-03-08 23:44:14 · 2285 阅读 · 1 评论 -
【hive】hive仓库之拉链表实现
在数仓建设中,经常会遇到需要查找某条数据的历史状态及状态改变的时间点,比如查找某个用户历史所有的变更记录,在业务数据库中是会有变更和物理删除,而用户id是主键,所以只会记录用户最新的记录,如果只是全量同步业务数据库中的用户表,在最新分区中无法查到用户变更记录,如果把全量数据每天快照全部保留,会浪费很多空间,并且查询效率低,逻辑也复杂。做成拉链表既能节省空间,也能快速查询出某个用户所有变更记录和变更类型、变更日期。此方案比我以前博客的方案优化点:数据仓库之拉链表的更新方法此方案支持数据重跑,即某天数据发现原创 2020-12-14 23:01:39 · 964 阅读 · 0 评论 -
java.lang.NoSuchMethodError: com.lmax.disruptor.dsl.Disruptor.<init>
在启动hive客户端是报错如下:Exception in thread "main" java.lang.NoSuchMethodError: com.lmax.disruptor.dsl.Disruptor.<init>(Lcom/lmax/disruptor/EventFactory;ILjava/util/concurrent/ThreadFactory;Lcom/lmax/disruptor/dsl/ProducerType;Lcom/lmax/disruptor/WaitStrat原创 2020-11-01 16:05:11 · 1410 阅读 · 0 评论 -
【hive】获取hive最新分区UDF函数
在离线数仓中,会碰到事实表关联维表时只需要维表最新分区的数据关联即可,这时可以编写UDF函数获取表的最新分区,下面代码是通过遍历HDFS文件路径获取最新分区。<repositories> <repository> <id>mvnrepository</id> <url>https://repository.cloudera.com/artifactory/cloudera-repos原创 2020-08-23 01:20:44 · 1182 阅读 · 0 评论 -
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.SafeModeException)
启动hive报错org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.SafeModeException)是因为开启了安全模式执行此命令即可hdfs dfsadmin -safemode leave原创 2020-08-21 23:13:13 · 3789 阅读 · 2 评论 -
hive metastore和hiveserver2启动脚本
cat start-metastore.sh#!/bin/sh HIVE_HOME=/opt/software/hive-3.1.1## 启动服务的时间DATE_STR=`/bin/date '+%Y%m%d%H%M%S'`# 日志文件名称(包含存储路径)HIVE_METASTORE_LOG=${HIVE_HOME}/logs/hivemetastore-${DATE_STR}....原创 2020-05-05 20:25:52 · 789 阅读 · 0 评论 -
hive同一张表union all的优化
insert overwrite table dwd.dwd_user_play_event_1d_delta_daily partitions (dt = '${DT}') select * from ods.user_event_log_ex where dt = '${DT}' and event_name = 'play_start' union all select * ...原创 2020-03-29 19:53:23 · 2746 阅读 · 1 评论 -
hive通过grouping sets多维度组合去重统计避免使用distinct
在hive中,如果遇到多维度组合统计,并且要进行去重统计,例如统计不同维度组合的访问用户数,比如统计运营商、手机品牌、网络类型的用户数,怎样避免不用ditinct(因为distinct效率低),并且grouping__id和以前维度组合保持一致呢?select * from temp.temp_active_user_info t limit 10;实现方法一:通过grouping set...原创 2020-02-23 21:47:21 · 3167 阅读 · 1 评论 -
【hive】hive中字符串比较,按位置逐个比较
思考:字符串’20200222’比’202003’大还是小?'abcd’比’acb’大还是小?字符串’20200222’比’202002’大还是小?我毫无犹豫的给出了答案:三个都是大于。正确到底结果是什么?我们用代码运行验证即可得到正确答案。select '20200222' > '202003'; --结果:falseselect 'abcd' > 'acd'; ...原创 2020-02-23 00:12:23 · 10922 阅读 · 2 评论 -
hive列转行:将多列按列名和值转换为两列
表结构:operation_name, network_type, shell_time, shell_time2, load_time需求:将shell_time, shell_time2, load_time三个字段转为两个字段:type, time,type为字段名称,time为字段的值样例数据:operation_name network_type type time...原创 2020-01-09 17:28:12 · 3718 阅读 · 0 评论 -
hive解析不确定key的json,将key和value分别放入两列
最近接到需求:客户端上报json数据,入数据库后需要对json中的key分组统计时长和次数,但json中的key是不确定的,经常会增删。明细层模型设计:将key和value分别设计为1列,这样能不需要关心json中的key和value怎么变,都能根据客户端上报的数据放入数据数据库由此引发思索:在json不确定的key和value情况下,怎么把key和value取出,并进行行转列放入表中?...原创 2020-01-09 16:36:47 · 11482 阅读 · 1 评论 -
hive创建表的三种方式
hive的表分为三种:内部表(删除表会同时删除HDFS文件)、外部表(删除表只会删除源数据,并不会删除HDFS文件)、临时表(只会当前会话有效,会话结束,临时表消失)hive创建表的方式有三种:直接创建表CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name -- (Note: TEMPORA...原创 2019-12-28 18:52:37 · 2372 阅读 · 0 评论 -
hive中的union和union all的区别
在hive中,union和union all都是对两个子查询的结果合并,不过还是有区别的,union会对两个子查询的结果去重合并,而union all不会对子查询结果去重处理。接下来验证通过实战进行验证,下面是两张表的数据。注意:Hive 1.2.0之前的版本仅支持UNION ALL,其中重复的行不会被删除。Hive 1.2.0和更高版本中,UNION的默认行为是从结果中删除重复的行。s...原创 2019-12-28 16:16:30 · 19287 阅读 · 0 评论 -
使用shell按天循环执行指定连续周期内的hive代码
废话不多少,直接上代码:#!/bin/sh#*****************************************************************************************#*** 程序功能: 按天循环导入分区数据#*** 输入参数: -s <START_DAY> :需要导入的开始日期#*** -e &...原创 2019-12-08 15:48:55 · 841 阅读 · 0 评论 -
Hive启动hiveserver2报错:Could not open client transport with JDBC Uri解决方案
通过beeline进入hive客户端,报错如下:问题排查:检查$HIVE_HOME/lib/是否有mysql-connector-java-5.1.27-bin.jar(根据自己hive本版可能有不同jar包)检查hive-site.xml配置中端口是否正确hive.server2.thrift.port10000检查hive server启动是否正常,查看监听$ netstat...原创 2019-11-18 21:28:57 · 2543 阅读 · 0 评论 -
Hive统计员工连续打卡最大天数(剔除周末)
作为人力资源员工管理人员,公司经常会对员工考勤进行统计,有些领导会根据员工连续考勤最大天数数据作为考核基础。下面就来用代码完成这个需求,在我之前的博客中有关怎么统计连续天数(难点就是怎么将周末此处后算连续打卡),博客链接:hive中统计用户连续交易的总额、连续登陆天数、连续登陆开始和结束时间、间隔天数一、 准备模拟数据cat temp_fuyun_attendance_tb.txt #分隔符为...原创 2019-11-08 15:08:24 · 1833 阅读 · 2 评论 -
MapReduce过程详解及其性能优化
废话不说直接来一张图如下:从JVM的角度看Map和ReduceMap阶段包括:第一读数据:从HDFS读取数据1、问题:读取数据产生多少个Mapper??Mapper数据过大的话,会产生大量的小文件,由于Mapper是基于虚拟机的,过多的Mapper创建和初始化及关闭虚拟机都会消耗大量的硬件资源;Mapper数太小,并发度过小,Job执行时间过长,无法充分利用分布式硬件资源;2、M...转载 2019-10-19 23:11:33 · 308 阅读 · 0 评论 -
Hive锁表
查看锁表语句:SHOW LOCKS <TABLE_NAME>;SHOW LOCKS <TABLE_NAME> extended;SHOW LOCKS <TABLE_NAME> PARTITION (<PARTITION_DESC>);SHOW LOCKS <TABLE_NAME> PARTITION (<PARTITION...原创 2019-09-19 17:46:13 · 591 阅读 · 0 评论 -
EError while compiling statement: FAILED: SemanticException [Error 10036]: Duplicate column name:
创建表的时候报如下错误:Error: Error while compiling statement: FAILED: SemanticException [Error 10036]: Duplicate column name: content_id (state=42000,code=10036)create table temp.temp_zhibo_0423 asselect a....原创 2019-04-24 11:38:10 · 16942 阅读 · 0 评论 -
hive窗口函数之sum,avg,min,max
在hive的统计分析中,其实窗口函数还是比较常用也重要的。今天整理下hive中窗口函数的sum,avg,min,max,后续再整理其他常用的。首先模拟创建一张通话记录表:字段有主叫号码,主叫时间,通话时长&amp;amp;gt; create table `call_test` ( `pone_number` string, `createtime` string, --day ...原创 2018-12-10 23:54:25 · 8980 阅读 · 0 评论 -
hive中的正则表达式
目录正则表达式基本语法普通字符非打印字符特殊字符限定符定位符选择在Hive中的使用在大数据日常开发中,遇到从某些字符串中匹配或替换某个元素是很常见的事情,比如:电话号码字段的值会有+86、86开头的值,现想将这列的值全部变为11的手机号码,那么我们就需要利用hive中的正则表达式达到效果create table temp.temp_mobile_tb (mobile string);in...转载 2019-07-14 00:42:26 · 5095 阅读 · 0 评论 -
FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.me
启动hive的metastore或者启动hive后执行命令报错如下:FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.me原因分析:是由于没有初始化数据库导致,执行名称初始化数据库即可。解决办法:执行命令:schematool -dbTyp...原创 2019-07-13 23:13:34 · 26748 阅读 · 10 评论 -
Hive中快速复制一张分区表的结构和数据
首先,来回顾下在hive中创建表的三种方式:直接创建表:create table table_name (column1 type1, column2 type2, …)创建新表只复制旧表的结构:create table new_table_name like select * from old_table_name创建新表复制旧表的结构和数据:create table new_table_...原创 2019-01-30 21:54:55 · 6697 阅读 · 1 评论 -
hive中的开窗函数
目录count开窗函数sum开窗函数min开窗函数max开窗函数avg开窗函数first_value开窗函数last_value开窗函数lag开窗函数、lead开窗函数cume_dist开窗函数排序开窗函数rank开窗函数dense_rank开窗函数ntile开窗函数row_number开窗函数percent_rank开窗函数最近遇到了hive开窗函数的工作,并且面试时很有可能会问到hive的...原创 2019-01-23 10:54:39 · 1807 阅读 · 1 评论 -
hive如何解析json数组
在hive的内置函数中,提供了两个函数用来解析json,分别是get_json_object和json_tuple首先来查看下get_json_object函数的详细信息&amp;gt; desc function extended get_json_object;OKtab_nameget_json_object(json_txt, path) - Extract a json object ...原创 2019-01-23 23:57:08 · 21954 阅读 · 7 评论 -
hive分区表新增字段(指定添加列的位置)+重刷历史方法(避免旧分区新增字段为NULL)
今天接到需求大概是这样的,在以前上线的分区报表中新加一个字段,并且要求添加到指定的列,然后刷新同步以前的数据,现将模拟实现如下:创建测试表create external table test.table_add_column_test( original_column1 string comment '原始数据1', original_column2 string comment '...原创 2019-01-07 23:32:53 · 15465 阅读 · 2 评论 -
hive如何查找函数并查看函数使用方法
我们在使用hive函数时经常会出现对函数名、参数使用及返回值等记忆模糊,然后需要到网上各种查找资料。今天来教大家一种使用hive命令模糊查找相关函数名称、函数的用法及详细说明并举例,较少大家查找资料的时间,提高效率。1.查看date相关的函数show functions like '*date*';OKcurrent_datedate_adddate_formatdate_sub...原创 2018-12-26 13:11:49 · 4811 阅读 · 0 评论 -
hive中distinct用法
hive中的distinct是去重的意思,和group by在某些情况下有相同的功能下面测试下distinct的部分功能,先创建一张测试表create table test.trip_tmp(id int,user_id int,salesman_id int,huose_id int);插入模拟数据insert into test.trip_tmp values(1, 2, ...原创 2019-01-05 11:48:53 · 44844 阅读 · 2 评论 -
hive 配置参数说明大全
hive.exec.mode.local.auto 决定 Hive 是否应该自动地根据输入文件大小,在本地运行(在GateWay运行) 默认值:true hive.exec.mode.local.auto.inputbytes.max 如果hive.exec.mode.loc...转载 2018-12-16 00:17:40 · 356 阅读 · 0 评论 -
hive启动MetaStore报错解决方案
今天在自己的虚拟机上安装apache-hive-3.1.1时启动hive时出现了很多错误,经过不断的资料查询及测试最终可以正常运行了,特记录下,加深自己的印象分享给大家,也以便以后出现同样的错误时可以查看笔记解决。第一条错误:MetaException(message:Error creating transactional connection factory) at org.apache...原创 2018-12-15 23:45:44 · 22442 阅读 · 1 评论 -
hive中判断A表时间字段是否在B表的两个时间字段中及求订单中间休息时间
先在hive中创建两张表并插入模拟数据:-- 创建表create table A (id int,time string);create table B (id int,start_time string,end_time string);-- 插入模拟数据insert into A values(1, '2018-04-02 13:34:12');insert int...原创 2018-12-06 19:41:32 · 2390 阅读 · 0 评论 -
测试hive中的between and 是否包头包尾
在SQL中,between and在不同SQL语言中结果不一样,今天就来测试下hive中的between and 是否包头包尾结论是包头包尾的,接下来用实践去证明它。首先创建一张临时表create temporary table test.test_test (id int,saly int);插入模拟数据insert into table test.test_test valu...原创 2018-12-13 10:47:07 · 38299 阅读 · 0 评论 -
hive2.0中常用的内置函数大全
目录数学函数abs(x):返回绝对值greatest(T v1, T v2, ...):求最大值least(T v1, T v2, ...):求最小值round(DOUBLE a):四舍五入round(DOUBLE a, INT d):指定精度的四舍五入bround(DOUBLE a):银行家舍入法bround(DOUBLE a, INT d):银行家指定精度的舍入法,保留d位小数floor(DO...原创 2018-12-09 00:29:05 · 5015 阅读 · 1 评论 -
hive中查看表的信息
目录查看表的分区情况模糊查看表查看表的创建语句查看表的结构信息(详细)简单查看表的结构信息查看表的扩展信息(信息更详细)在hive中,我们可以通过命令查看表的创建语句、分区、及其他详细信息查看表的分区情况> show partitions new_partition;OKpartitiondaystr=201501120030daystr=201501120100dayst...原创 2019-01-30 22:44:21 · 11895 阅读 · 0 评论 -
hive中join on和where一起使用时的执行顺序及关联字段为null的情况
查看很多博客,都说join on和where一起使用时,先进行join产生临时表,再进行where条件过滤得到结果表,在面试中问到也有面试官是这么解释的,但使用explain查看执行计划,你会发现执行顺序并不是这样。在两表join时如果关联字段为null,有些博客上写会产生数据倾斜或笛卡儿积,其实不会,因为在join之前就会对join的表中关联字段进行非空过滤。&gt; explain sel...原创 2019-02-17 01:34:53 · 7996 阅读 · 4 评论