
Hive
文章平均质量分 64
BabyFish13
不要急,慢慢来;控制好节奏,奋斗到底!
展开
-
hive 之 Cube, Rollup等上钻函数
cube和rollup的区别是CUBE会根据指定列进行所有组合,rollup会根据顺序从左到右进行组合可以使用grouping进行空值判断可以使用grouping__id进行粒度区分。原创 2025-02-24 20:03:04 · 1009 阅读 · 0 评论 -
Hive性能调优考量
Hive作为大数据领域常见的数据仓库组件,在设计和开发阶段需要注意效率。影响Hive效率的不仅仅是数据量过大、数据倾斜、job(小文件过多)或者磁盘I/O过多、MapReduce分配不合理等因素都会对Hive的效率有影响。对Hive的调优可以从架构优化、参数优化以及Hive SQL优化三个方面考虑。原创 2024-12-29 08:06:15 · 1008 阅读 · 0 评论 -
Hive之import和export使用详解
在hive-0.8.0后引入了import/export命令。当导出一个分区表,原始数据可能在hdfs的不同位置,export/import命令也支持导出分区表的不同子分区。导出的元数据存储在目标目录,并且数据文件是存储在不同的子目录下。Export/import命令可以独立工作在使用存储元数据的rdbms中。原创 2024-12-29 07:36:42 · 1123 阅读 · 0 评论 -
Hive刷分区MSCK
但是修改这个参数有个风险,就是你在未来操作这些问题分区的数据文件时,由于你当时没有排查并解决这些问题,可能导致操作报错,博主有过因为跳过验证后期在删除历史无用的分区时报空指针的问题。,Hive表分区连贯性检查),运行MASK REPAIR TABLE 后,Hive会去检测这个表在HDFS上的文件,把没有写入metastore的分区信息写入到metastore。ADD PARTITION不会去直接操作对应的数据路径,和msck的时候一样,对于需要追加的新分区只操作元数据的新增。原理相当简单,执行后,原创 2024-12-29 06:53:37 · 1069 阅读 · 0 评论 -
配置hive支持中文注释
hivemetastore默认的字符集是latin1,所以中文注释会乱码。但是不能将metastore库的字符集更改为utf-8,只能对特定表、特定列修改为utf-8。原创 2024-12-29 06:23:12 · 702 阅读 · 0 评论 -
hive中的四种排序类型
order by 语句的运行效率较低,一般要配合limit 使用。原创 2024-12-28 14:09:29 · 675 阅读 · 0 评论 -
Hive多级分区
随着系统运行的时间越来越长,表的数据量越来越大,而hive查询做全表扫描,会消耗很多时间,降低效率。而有时候,我们需求的数据只需要扫描表中的一部分数据即可。在Hive中,子分区是指在表的某个分区内进一步划分的分区,这样可以提高数据的查询和管理效率。子分区是通过在表定义中使用PARTITIONED BY子句来实现的,但是Hive不支持子分区,通常我们叫做多级分区。每个分区都可以有自己的子分区,但Hive不支持多于两级的嵌套分区。在查询时,我们就可以指定分区查询,避免了hive做全表扫描,从而提高查询效率。原创 2024-12-27 19:53:13 · 449 阅读 · 0 评论 -
Hive分区再分桶表
在Hive中,数据通常是根据分区(partition)来组织的,但是对于大数据集,单层分区可能不够用,因此可以进一步细分为桶(bucket)。桶可以用于提供额外的并行处理和优化查询性能。在这种情况下,数据首先根据分区键进行分区,然后在每个分区内进行分桶。原创 2024-12-27 18:06:11 · 1798 阅读 · 0 评论 -
hive分区和分桶复习
两种用于优化查询性能的数据组织策略,数仓设计的关键概念,可提升Hive在读取大量数据时的性能。原创 2024-12-27 17:31:07 · 929 阅读 · 0 评论 -
数据倾斜的原因及解决方案
一、什么是数据倾斜及数据倾斜是如何产生的数据倾斜的根本原因是数据的key分布不均,个别key数据很多,超出了计算节点的计算能力的结果;过程:数据经过 map后,由于不同key 的数据量分布不均,在shuffle 阶段中通过 partition 将相同的 key 的数据打上发往同一个 reducer 的标记,然后开始 spill (溢写)写入磁盘,最后merge成最终map阶段输出文件。如此一来 数据量很大的key 将发往同一个 reducer,超出了节点的计算能力,等待时间超出了可接受范围。原创 2022-05-08 09:09:08 · 25392 阅读 · 0 评论 -
hive中[增量/全量比对]算法
参考:https://blog.youkuaiyun.com/weixin_40444678/article/details/810836141、原始表CREATE EXTERNAL TABLE ods.user ( user_num STRING COMMENT '用户编号', mobile STRING COMMENT '手机号码', reg_date STRING COMMENT '注册日期')COMMENT '用户资料表'PARTITIONED BY (dt string)ROW ...原创 2021-03-30 14:26:36 · 2411 阅读 · 0 评论 -
hive分区表快速复制
1、快速建表drop table if exists dwt.dwt_activity_auction_house_activity_sale_full_1d_0805forliuqian;create table dwt.dwt_activity_auction_house_activity_sale_full_1d_0805forliuqian like dwt.dwt_activity_auction_house_activity_sale_full_1d;2、查看复制好的表结构hi原创 2021-01-19 18:58:58 · 1319 阅读 · 0 评论 -
由LEFT SEMI JOIN所联想到的
一、LEFT SEMI JOIN 与 INNER JOIN的区别1. LEFT SEMI JOINLEFT SEMI JOIN 是 IN/EXISTS 子查询的一种更高效的实现。Hive 当前没有实现 IN/EXISTS 子查询,所以你可以用LEFT SEMI JOIN 重写子查询语句。LEFT SEMI JOIN 的限制是, JOIN 子句中右边的表只能在 ON 子句中设置过滤条件,在 WHERE 子句、SELECT 子句或其他地方过滤都不行。SELECT a.key, a.valu...原创 2020-06-16 20:41:22 · 365 阅读 · 0 评论 -
需用历史全量数据计算的替代方案
比如,计算第一次、总量等,正常情况下需要用到所有历史数据进行计算。但有些表数据特别大,用全景历史数据计算比较费力,可能就算不出来。这时,可以考虑用这种方式。其优点是,数据涉及到的数据量偏小;其缺点也很明显,需要从历史数据起始之日,一天天刷到当前,中间少一天不可。如果中间有一天出现问题,则后面的数据也全部出错。可以在实践中,权衡利裨,根据实际情况,选择合适的方案。1、样例表结构CREA...原创 2021-01-19 19:02:58 · 424 阅读 · 0 评论 -
hive根据日期获取星期几的方法
hive原生未提供获取一个日期是星期几的方法,所以我们只有自己编写udf函数提供;除UDF之外,也可以使用hive原生函数经组合获取星期几。1、格式pmod(datediff(#date#, '1920-01-01') - 3, 7)#date#表示给的日期。select pmod(datediff('2020-03-03', '1920-01-01') - 3, 7)输出的...原创 2020-03-03 14:41:03 · 8931 阅读 · 0 评论 -
在hive中将UTC转为正常时间的方法
时间相关含义:1. 时间戳(unix timestamp)表示以(1970-01-01 00:00:00)为起点,到现在的秒数。2. GMT和UTC先说结论,UTC与GMT基本上等同,误差不超过0.9秒。GMT,即格林尼治标准时间,也就是世界时。UTC,即协调世界时。UTC现在作为世界标准时间使用。用from_utc_timestamp 把UTC标准时间切换到北京时间:...原创 2020-02-11 15:25:40 · 648 阅读 · 0 评论 -
Hive 内外表转换、表结构复制、动态分区等实操
内部表和外部表的转换alter table tablePartition set TBLPROPERTIES ('EXTERNAL'='TRUE'); //内部表转外部表alter table tablePartition set TBLPROPERTIES ('EXTERNAL'='FALSE'); //外部表转内部表复制非分区表表结构和数据CREATE TABLE big...原创 2019-12-16 19:43:44 · 535 阅读 · 0 评论 -
Hive小文件合并
会话级Session配置文件数目过多,会给HDFS带来压力,并且会影响处理效率,可以通过合并Map和Reduce的结果文件来消除这样的影响:set hive.merge.mapfiles = true; ##在 map only 的任务结束时合并小文件set hive.merge.mapredfiles = false; ## true 时在 MapReduce 的任务结束时合并小文件...原创 2019-12-16 10:28:16 · 535 阅读 · 0 评论 -
hive中hivevar的传参使用
1、hive参数说明usage: hive-d,--define <key=value> Variable substitution to apply to Hive commands. e.g. -d A=B or --define A=B --database <datab...原创 2019-11-04 14:38:10 · 8121 阅读 · 0 评论 -
hive字符串截取的另一思路
1、通常情况下,hive中字符串的截取有substr/substring可以使用。语法: substr(string A, int start, int len),substring(string A, intstart, int len),用法一样,三个参数返回值: string说明:返回字符串A从start位置开始,长度为len的字符串但hive中没有字符串位置函数,这样对于较为复杂的截取...原创 2019-11-01 16:36:07 · 6374 阅读 · 1 评论 -
hive中json字符串(get_json_object与json_tuple)及url解析(parse_url)
json字符串数据:select xjsonfrom ods.ods_visit_new a1where dt='2019-10-26' limit 3;OK{"type":"click","time":1572019190,"userinfoData":{"isNewUser":0},"requestData":{"oVersion":"9","screen":"360_772",...原创 2021-01-26 19:46:18 · 1154 阅读 · 0 评论 -
hive动态分区使用(如非必须,不建议使用)
往hive分区表中插入数据时,如果需要创建的分区很多,比如以表中某个字段进行分区存储,则需要复制粘贴修改很多sql去执行,效率低。hive提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称,从而建立分区。一、单一分区字段动态分区表的创建与数据插入1、建表drop table if exists tmp.tmp_user_push_dynamic_partition;C...原创 2019-10-16 18:52:51 · 3216 阅读 · 0 评论 -
Hive切换计算引擎
1、默认计算引擎mrset hive.execution.engine=mr;2、spark计算引擎set hive.execution.engine=spark;set spark.executor.cores=2;set spark.executor.memory=10G;set spark.executor.instances=10;set hive.mapred.m...原创 2019-10-16 13:23:02 · 3907 阅读 · 0 评论 -
Hive1.2.1安装配置实录整理
本文是另一篇文章的补充:http://blog.youkuaiyun.com/nisjlvhudy/article/details/49338883。1、配置Hive元数据库(此处为mysql)在已经装好的mysql上新增用户:create user 'hive' identified by 'iloveyou';grant all privileges on *.* to 'hive'@'%原创 2016-03-23 17:29:15 · 1071 阅读 · 2 评论 -
Hive View
Hive 0.6版本及以上支持视图,Hive View具有以下特点:1)View是逻辑视图,暂不支持物化视图(后续将在1.0.3版本以后支持);2)View是只读的,不支持LOAD/INSERT/ALTER。需要改变View定义,可以是用Alter View;3)View内可能包含ORDER BY/LIMIT语句,假如一个针对View的查询也包含这些语句, 则View中的语句优先级高;原创 2016-04-28 13:43:20 · 1661 阅读 · 0 评论 -
HIVE授权配置
HIVE授权管理,类似于操作系统权限可以授予给不同的主题,如用户(USER),组(GROUP),角色(ROLES),Hive还是支持相当多的权限管理功能,满足一般数据仓库的使用,同时HIVE能支持自定义权限。HIVE授权并不是完全安全,在其目前的形式来看,授权方案的目的是主要是为了防止用户不小心做了不合法的操作,但不承诺防止用户恶意破坏。1、开启Hive的身份认证功能,默认是false原创 2016-04-18 17:45:38 · 2258 阅读 · 0 评论 -
Hive与HBase特性及区别
1、HiveApache Hive是一个构建于Hadoop(分布式系统基础架构)顶层的数据仓库,而不是数据库。Hive可以看作是用户编程接口,它本身不存储和计算数据;它依赖于HDFS(Hadoop分布式文件系统)和MapReduce(一种编程模型,映射与化简;用于大数据并行运算)。其对HDFS的操作类似于SQL—名为HQL,它提供了丰富的SQL查询方式来分析存储在HDFS中的数据;HQL经过编原创 2016-03-23 10:21:59 · 1201 阅读 · 0 评论 -
Hive数据倾斜问题总结
1数据倾斜的原因1.1操作:关键词:Join情形:其中一个表较小,但是key集中--->后果:分发到某一个或几个Reduce上的数据远高于平均值情形:大表与大表,但是分桶的判断字段0值或空值过多--->后果:这些空值都由一个reduce处理,灰常慢关键词:group by情形:group by 维度过小,某值的数量过多--->后果:处理某值的reduce灰常耗时原创 2016-07-11 16:31:06 · 885 阅读 · 0 评论 -
Hive外部表学习
Hive中内部表与外部表的区别: Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。需要注意的是传统数据库对表数据验证是 schema on write(写时模原创 2016-07-12 11:35:48 · 1182 阅读 · 0 评论 -
查看Hive表信息及占用空间的方法
一、Hive下查看数据表信息的方法方法1:查看表的字段信息desc table_name;方法2:查看表的字段信息及元数据存储路径desc extended table_name;方法3:查看表的字段信息及元数据存储路径desc formatted table_name;方法4:查看建表语句及其他详细信息的方法show create table table_原创 2016-07-28 15:43:47 · 35893 阅读 · 0 评论 -
Hive有用技巧小结
1.hive模糊搜索表show tables like '*name*';2.查看表结构信息desc formatted table_name;desc table_name;3.查看分区信息show partitions table_name;4.根据分区查询数据select table_coulm from table_name where partit原创 2016-07-20 16:25:58 · 1537 阅读 · 0 评论 -
NameNode配置HA后及其反过程Hive路径不正确的问题解决
在CDH5.7下,配置了NameNode的HA后,Hive无正常查询数据了,但是其他的组件HDFS , HBase ,Spark都正常的。Hive新建表出现如下异常:CREATE TABLE `x_test`( `client_ip` string , `time` string , `http_request` string , `node_ip` string原创 2016-10-11 14:38:37 · 4380 阅读 · 1 评论 -
运行crontab时出现hive:command not found及找不到hadoop_home问题处理
如果确认已经在脚本中用了绝对路径,这就可能是crontab的环境变量和自己运行时的环境变量不同导致。所以,在shell脚本中加入1)source /etc/profile2)然后用locate /bin/hive找出对应一个hive的位置,当然由于向下兼容,当然找的是最新版本的hive的位置,将原本的hive命令改成绝对路径简而言之,就是所有能用到绝对路径的地方都使用绝对路原创 2016-10-25 15:29:56 · 4842 阅读 · 0 评论 -
使用Python实现Hive的UDF示例
主要分为两个部分,一个部分为Python脚本实现想要实现的功能,另外一个部分为HQL部分,调用Python脚本对数据进行处理。HQL调用Python实现的UDF其实有一个重定向的过程,把数据表中之列的列重定向Python的标准输入中,按行操作,首先将每行按照指定的分割符分开,一般为’\t’,然后剩下的就是对其进行操作,print需要的列,以’\t’分割。1、Python实现的UDF代码原创 2016-12-10 15:49:23 · 5437 阅读 · 0 评论 -
hadoop分布式复制命令distcp
distcp一般用于在两个HDFS集群中传输数据。如果集群在hadoop的同一版本上运行,就适合使用hdfs方案: % hadoop distcp hdfs://namenode1/foo hdfs://namenode2/bar Hadoop distcp命令用于在两个不同的集群间拷贝数据,它的优点在于将数据拷贝操作作为mapred程序来执行,这样就大大提高了拷贝的速度,使用d原创 2016-12-15 13:59:22 · 2191 阅读 · 0 评论 -
Python多线程调用Hive接口的MapReduce示例
1、单线程Hive调用/Users/nisj/PycharmProjects/EsDataProc/bi-static/hive-user_appsource_detail.py# -*- coding=utf-8 -*-import warningsimport datetimeimport timeimport oswarnings.filterwarnings("igno原创 2017-01-03 15:54:48 · 1523 阅读 · 0 评论 -
HiveQL查询变量(动态参数值)的使用
主要用hiveconf来进行变量值的获取,格式如下:变量赋值:set pt_day='2016-12-31';变量引用:${hiveconf:pt_day} --> 用在Hql里参考示例:set pt_day='2016-12-31';drop table if exists xx_new_identifier;create table xx_new_identi原创 2017-01-24 16:57:11 · 15847 阅读 · 1 评论 -
Python自动化拉取Mysql数据并装载到Hive
Mysql的数据表分为普通的表及以键值与256取模分表两种形式;流程顺序是先根据Mysql表结构进行Hive库上的建表,然后从Mysql下载到OS上,最后将数据装载到Hive库中。目前,暂不考虑数据的增量更新;主要考虑目前的数据环境较乱,可以较方便的将数据拉取到大数据平台,然后进行相关的计算。程序调用有并行和串行两种方式,是否用并行调度的那个脚本,取决于服务器的磁盘空间大小及源Mysql库原创 2017-03-21 17:41:02 · 2005 阅读 · 0 评论 -
Python从阿里云Oss拉数据写入Hive表并进行相关处理
数据的流向是:先从Oss拉取原始日志文件数据,根据Hive分区表建表规范放在HDFS上;然后将数据根据不同的过滤条件分别插入到对应的其他中间表;由于空间有限,原始数据转移处理好之后,立马删除从Oss上拉取下来的日志数据;之后,再分别对各中间表数据利用Hive正则进行切分和提取,并根据需求进行汇总统计及tableau展现。1、Hive目标库建表drop table if exists xx_原创 2017-03-20 12:26:58 · 1745 阅读 · 0 评论 -
hive上连续登录天数的查询
1、数据测试表及测试数据测试表表结构:hive> desc data_room;OKroomid string pt_month string pt_day原创 2017-04-08 16:18:40 · 4815 阅读 · 0 评论