Hive
文章平均质量分 55
BabyFish13
不要急,慢慢来;控制好节奏,奋斗到底!
展开
-
数据倾斜的原因及解决方案
一、什么是数据倾斜及数据倾斜是如何产生的数据倾斜的根本原因是数据的key分布不均,个别key数据很多,超出了计算节点的计算能力的结果;过程:数据经过 map后,由于不同key 的数据量分布不均,在shuffle 阶段中通过 partition 将相同的 key 的数据打上发往同一个 reducer 的标记,然后开始 spill (溢写)写入磁盘,最后merge成最终map阶段输出文件。如此一来 数据量很大的key 将发往同一个 reducer,超出了节点的计算能力,等待时间超出了可接受范围。原创 2022-05-08 09:09:08 · 24665 阅读 · 0 评论 -
hive中[增量/全量比对]算法
参考:https://blog.csdn.net/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 · 2217 阅读 · 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 · 1287 阅读 · 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 · 338 阅读 · 0 评论 -
需用历史全量数据计算的替代方案
比如,计算第一次、总量等,正常情况下需要用到所有历史数据进行计算。但有些表数据特别大,用全景历史数据计算比较费力,可能就算不出来。这时,可以考虑用这种方式。其优点是,数据涉及到的数据量偏小;其缺点也很明显,需要从历史数据起始之日,一天天刷到当前,中间少一天不可。如果中间有一天出现问题,则后面的数据也全部出错。可以在实践中,权衡利裨,根据实际情况,选择合适的方案。1、样例表结构CREA...原创 2021-01-19 19:02:58 · 375 阅读 · 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 · 8395 阅读 · 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 · 476 阅读 · 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 · 496 阅读 · 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 · 7771 阅读 · 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 · 6243 阅读 · 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 · 1108 阅读 · 0 评论 -
hive动态分区使用(如非必须,不建议使用)
往hive分区表中插入数据时,如果需要创建的分区很多,比如以表中某个字段进行分区存储,则需要复制粘贴修改很多sql去执行,效率低。hive提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称,从而建立分区。一、单一分区字段动态分区表的创建与数据插入1、建表drop table if exists tmp.tmp_user_push_dynamic_partition;C...原创 2019-10-16 18:52:51 · 3021 阅读 · 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 · 3694 阅读 · 0 评论 -
Hive整表数据分成256分表样式导出
不是由于mysql数据装载的需要,这样做实在太费时费力;即使用上32个并行,10来分钟就可以整场导出的表,要耗时1个半小时。/Users/nisj/PycharmProjects/BiDataProc/love/userLevel/HiveRunData-yicheng.py# -*- coding=utf-8 -*-import osimport timeimport datetim...原创 2018-08-08 16:43:19 · 1127 阅读 · 0 评论 -
根据uid计算用户活跃日期及进行用户日活分类
1、建表drop table if exists oss_bi_all_type_of_dau101;CREATE EXTERNAL TABLE `oss_bi_all_type_of_dau101`( `uid` bigint, `newer_day` string, `remain_day_num` int, `parms` map<string,strin...原创 2018-11-30 14:36:47 · 279 阅读 · 0 评论 -
连续N天登录的数据获取(hive)
1、获取用户连续登录天数--整合源表,保证一个用户每天一条记录drop table if exists xxnisj1112_uid_basic;create table xxnisj1112_uid_basic asselect uid,pt_dayfrom oss_bi_all_user_login_logwhere pt_day between '2018-10-01' an...原创 2018-11-13 16:56:21 · 4830 阅读 · 1 评论 -
hadoop分布式复制命令distcp
distcp一般用于在两个HDFS集群中传输数据。如果集群在hadoop的同一版本上运行,就适合使用hdfs方案: % hadoop distcp hdfs://namenode1/foo hdfs://namenode2/bar Hadoop distcp命令用于在两个不同的集群间拷贝数据,它的优点在于将数据拷贝操作作为mapred程序来执行,这样就大大提高了拷贝的速度,使用d原创 2016-12-15 13:59:22 · 2125 阅读 · 0 评论 -
Hive之Show、Describe语句使用
1.表及分区格式化信息包含存储位置、分隔符格式、创建时间等信息。describe formatted table_name [PARTITION(partition_desc)];describe formatted recommend_data_view partition (pt_day='2018-07-19');describe formatted recommend_data_v...原创 2018-07-24 09:59:11 · 18748 阅读 · 0 评论 -
hive中返回星期几
在Hive原生版本中,目前并没有返回星期几的函数。除了利用java自己编写udf外,也可以利用现有hive函数实现。方法格式:pmod(datediff('#date#', '任意年任意一个星期日的日期'), 7) 。如:2012-01-01刚好是星期日。pmod(datediff('#date#', '2012-01-01'), 7) 返回值:int说明:1、返回值为“0-6”(“0-6”分别...原创 2018-06-05 10:26:01 · 6532 阅读 · 2 评论 -
Hive数据范围等级转换实现
由于在hive中不能进行不等值连接,所以遇到诸如数据范围等级转换的问题就相对比较麻烦。可以使用[case when then]进行转换处理,但数据涉及到要转换的等级太多,代码无疑会很长。本例是一个比较中和一点的方法,相应损失了一些性能。1、等级转换的map表CREATE TABLE `xxwuy_empval_grade_map`( `grade` bigint, `empval` bi...原创 2018-06-04 16:36:02 · 2039 阅读 · 1 评论 -
Hive浮点数的几种不同取值
1、round:四舍五入round(DOUBLE d) : 返回DOUBLE型的d的BIGINT类型的近似值 round(DOUBLE d,INT) : 返回DOUBLE型的d的保留n位小数的DOUBLE类型的近似值 2、ceil:向上取整ceil(DOUBLE d): d是DOUBLE类型的,返回>=d的最小的BIGINT值 3、floor:向下取整floor(DOUBLE d): d是D...原创 2018-05-03 14:26:34 · 15932 阅读 · 0 评论 -
Hive命令行数据库常用操作
Hive 支持多数据库,Hive 默认的数据库是 default,每个数据库都是一个 hdfs 目录,default 比较特殊,位于 Hive 存储根目录下, 其他新建的数据库都会位于根目录子目录,子目录名为数据库名。1、查看所有的数据库show databases;2、使用数据库defaultuse default;3、查看数据库信息describe database default;4、显式展...原创 2018-02-23 09:56:53 · 1155 阅读 · 0 评论 -
hive中取上月份及迪卡尔积交叉连接
1、hive中上个月份的获取select SUBSTR(DATE_SUB(FROM_UNIXTIME(UNIX_TIMESTAMP()),30),1,7) ;select SUBSTR(DATE_SUB(concat('2018-02','-01'),28),1,7);select SUBSTR(DATE_SUB(concat('2018-01','-01'),28),1,7);其中...原创 2018-11-30 14:33:34 · 1345 阅读 · 0 评论 -
hive中string类型的json数据转化为map数据类型
1、原始hive表结构及样例数据原始的hive表json字符串是字符类型的。hive> desc honeycomb_all_user_point_record;OKuid bigint point int ...原创 2018-12-06 16:01:29 · 21334 阅读 · 0 评论 -
Hive中array嵌套map数据分离和处理
1、准备要处理数据的临时表drop table if exists xxlvc0103_json;create table xxlvc0103_json asselect pt_day,uid,parms['value'] json_valuefrom oss_bi_all_api_play_feedback_activewhere pt_day between '2019-01-0...原创 2019-01-04 11:06:27 · 4859 阅读 · 1 评论 -
Hive的数据存储格式
Hive支持的存储格式有: Text File SequenceFile RCFile Avro Files ORC Files Parquet注:Hive默认的格式为Text File,可以通过set hive.default.fileformat查看。hive支持在创建表的时候对数据进行压缩,配置如下:设置开启压缩:set hive.exec...原创 2019-10-10 17:53:04 · 710 阅读 · 0 评论 -
hive与hbase互通互联
1、hbase建表及插入数据1.1、启动终端hbase shell1.2、hbase建表create 'student', 'id', 'name'1.3、插入数据put 'student', 'row1', 'id:val', '1'put 'student', 'row1', 'name:val', 'Tony'put 'student', 'row2', 'id...原创 2019-09-21 17:03:08 · 413 阅读 · 0 评论 -
HiveQL数据抽样Sample查询
当数据量很大时,需要查找一个数据的子集用于加快数据的分析,这种技术就是抽样技术。Hive中,数据抽样分为以下三种:随机抽样;桶表抽样;块抽样;1 随机抽样语法结构使用Rand()和LIMIT关键字得到抽样数据,Distribute和Sort关键字确保数据在mappers和reducers之间高效的随机分布,也可以使用order by rand()实现,但是性能不好。语法: SEL...原创 2019-08-19 16:06:01 · 832 阅读 · 0 评论 -
hive性能优化的几个方面
一、Map阶段的优化:(控制hive任务中的map数,确定合适的map数,以及每个map处理合适的数据量)。map个数影响因子:input目录中文件总个数;input目录中每个文件大小;集群设置的文件块大小(默认为128M, 可在hive中通过set dfs.block.size;命令查看,不能在hive中自定义修改);举例:input目录中有1个文件(300M),会产生3个块(2个...原创 2019-08-19 06:49:07 · 643 阅读 · 0 评论 -
Hive文件存储格式
hive文件存储格式包括以下几类:1、TEXTFILE2、SEQUENCEFILE3、RCFILE4、ORCFILE(0.11以后出现)-支持有限5、Parquet-主要是用在Cloudera Impala上面其中TEXTFILE为默认格式,建表时不指定默认为这个格式,导入数据时会直接把数据文件拷贝到hdfs上不进行处理;SEQUENCEFILE,RCFILE,ORCFILE格式的表不能...原创 2019-08-18 16:48:43 · 764 阅读 · 1 评论 -
日期所在周、月等第一天最后一天的计算
1、hive中的情形select '2019-07-29' as day -- 时间 ,date_add('2019-07-29',1 - dayofweek...原创 2019-07-30 12:53:57 · 448 阅读 · 0 评论 -
Hive中计算两时间字段间隔小时数的方法
在hive中计算两时间字段的方法,不像Oracle中那么方便,需要经过如下示例所示的转换:select room_id,switch_time,updated_time,(hour(updated_time)-hour(switch_time)+(datediff(updated_time,switch_time))*24) as hourIntervalsfrom oss_bi_all_...原创 2019-02-25 15:29:52 · 7118 阅读 · 1 评论 -
hive之条件判断函数(IF,COALESCE,CASE)
1.If函数:if和case差不多,都是处理单个列的查询结果语法: if(boolean testCondition, T valueTrue, T valueFalseOrNull)返回值: T说明: 当条件testCondition为TRUE时,返回valueTrue;否则返回valueFalseOrNull举例: if(条件表达式,结果1,结果2)相当于java中的三目运算符,只...原创 2019-02-14 15:51:16 · 7972 阅读 · 0 评论 -
Hive中用参数变量在HQL中执行
Hive配置属性存储于 hiveconf 命名空间中,该命名空间中的属性是可读写的。在查询语句中插入 '${hiveconf:变量名}',就可以通过 hive -hiveconf来替换变量。例如,查询语句和执行方式如下:[root]$cat test.sql #查看该文件SELECT * FROM ${hiveconf:tablename}limit ${hiveconf:var_...原创 2019-02-14 16:51:08 · 7027 阅读 · 1 评论 -
Hive中避免科学计数法表示浮点数和长整数
在Hive中进行计算的时候经常会遇到数据结果以科学计数的方式显示出来,这并不是原本想要的结果。可以考虑用【cast(列名 as bigint/decimal(m,n))】的方式避免科学计数法结果的出现。1、浮点数非科学计数法展示hive> select pay_uid_rate_90,cast(pay_uid_rate_90 as decimal(32,30)),pay_amount_per...原创 2018-02-08 15:11:07 · 14229 阅读 · 0 评论 -
Hive1.2.1安装配置实录整理
本文是另一篇文章的补充:http://blog.csdn.net/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 · 1048 阅读 · 2 评论 -
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 · 15659 阅读 · 1 评论 -
Python自动化拉取Mysql数据并装载到Hive
Mysql的数据表分为普通的表及以键值与256取模分表两种形式;流程顺序是先根据Mysql表结构进行Hive库上的建表,然后从Mysql下载到OS上,最后将数据装载到Hive库中。目前,暂不考虑数据的增量更新;主要考虑目前的数据环境较乱,可以较方便的将数据拉取到大数据平台,然后进行相关的计算。程序调用有并行和串行两种方式,是否用并行调度的那个脚本,取决于服务器的磁盘空间大小及源Mysql库原创 2017-03-21 17:41:02 · 1961 阅读 · 0 评论 -
Python从阿里云Oss拉数据写入Hive表并进行相关处理
数据的流向是:先从Oss拉取原始日志文件数据,根据Hive分区表建表规范放在HDFS上;然后将数据根据不同的过滤条件分别插入到对应的其他中间表;由于空间有限,原始数据转移处理好之后,立马删除从Oss上拉取下来的日志数据;之后,再分别对各中间表数据利用Hive正则进行切分和提取,并根据需求进行汇总统计及tableau展现。1、Hive目标库建表drop table if exists xx_原创 2017-03-20 12:26:58 · 1675 阅读 · 0 评论 -
hive上连续登录天数的查询
1、数据测试表及测试数据测试表表结构:hive> desc data_room;OKroomid string pt_month string pt_day原创 2017-04-08 16:18:40 · 4766 阅读 · 0 评论