![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
hive
向阳飞行
还在学习的路上
展开
-
数仓-订单状态变化
引言:在数据仓库建设中,存在需要保存历史状态的情况,比如核心实体的历史状态/订单状态等。技术解决方案通常采用历史拉链表,但是拉链表计算逻辑复杂/成本高/使用困难,下面讨论其他的解决方案。累计快照事实表以订单模型为例:订单编号/状态/时间拉链表方案订单编号 状态 时间 开始时间 结束时间 001 下单 2020-12-03 2020-12-03 2020-12-04 001 付款 2020-12-04 2020-12.原创 2020-12-03 21:05:19 · 1062 阅读 · 0 评论 -
hive分区表修改增加列遇到的两个问题
由于需求改变,需要在原有的hive分区表中添加列,并每次充写最近30天的分区数据。问题:1.执行alter语句增加列后修改列的位置,导致数据串列。 2.重写分区后只有最新分区的新增列有数据,其他原有分区的该列为null。问题原因:1.hive增加列只是修改了hive的元数据,并没有改变hdfs的数据文件,其查询结果按照列的顺序和hdfs按分隔符分割后的数据对应,导致错列。2.原因与上面的相同,解决方法为删除旧分区后再重新写入,alter table db.table drop .原创 2020-11-26 14:31:37 · 768 阅读 · 0 评论 -
数据仓库之拉链表
背景:在业务数据中存在会改变状态的数据,需要做历史分析,比如订单状态、登录位置等。问题:如何找到历史某一天的所有主体的状态。针对上述问题有三种解决方案:每天保存全量数据快照:每天都做数据全量备份,可直接查询历史某个节点的全量数据。 每天只做增量数据抽取:查询的时候需要按用户分组并过滤更新时间最近的数据。 每天做增量数据且完成拉链:查询指定开始和结束时间即可。上述三种方案的利弊...原创 2020-03-11 17:36:19 · 2904 阅读 · 0 评论 -
计算连续登陆最大天数
背景:在网站平台类业务需求中用户的「最大登陆天数」,需求比较普遍。原始数据:u0001 2019-10-10u0001 2019-10-11u0001 2019-10-12u0001 2019-10-14u0001 2019-10-15u0001 2019-10-17u0001 2019-10-18u0001 2019-10-19u0001 2019-10-20u...原创 2019-11-01 11:21:57 · 10208 阅读 · 11 评论 -
hive调优记录
1.设置小文件合并配置参数set mapred.max.split.size=100000000;set mapred.min.split.size.per.node=100000000;set mapred.min.split.size.per.rack=100000000;2.限制Reducer个数的上限3.以上两类参数的调优说明:设置split size是需要减少ma...原创 2019-04-01 19:53:59 · 133 阅读 · 0 评论 -
Hive order by ,sort by ,distribute by, cluster by
Hive中对于排序给出了通用的「order by」与 非全局排序「sort by」至于其他两个函数是配合使用的。order by与sort by的区别:order by的使用与标准SQL相同,实现全局排序,但是缺点是由于要进行全局有序所以在reduce阶段只有一个reducer,也就意味着失去了发挥多节点并发的优势,性能较差。sort by是在分区内排序,在reduce阶段不会只剩...原创 2019-06-17 14:27:51 · 182 阅读 · 0 评论 -
hive 提交任务时Job init failed
背景:oozie+hive+python.执行操作:在oozie中配置python脚本动态拼接SQL使用hive执行关键操作:hiveSQL中有动态分区报错信息:2019-03-26 13:53:51,437 WARN [main] org.apache.hadoop.mapreduce.v2.app.job.impl.JobImpl: Job init failedor...原创 2019-06-26 11:37:44 · 462 阅读 · 0 评论 -
hive几种join方式
hive处理表关联时由于数据量以及数据倾斜等问题会导致计算性能差甚至任务失败,下面记录一下hive的几种关联方式。1.common join普通连接,在SQL中不特殊指定连接方式使用的都是这种普通连接。缺点:性能较差优点:操作简单,普适性强2.map joinmap端连接,与普通连接的区别是这个连接中不会有reduce阶段存在,连接在map端完成适用场景:大表与小表...原创 2019-06-28 10:41:13 · 4655 阅读 · 0 评论 -
python 操作 hive
在使用Hadoop生态的时候需要使用脚本动态拼接hiveSQL来实现对数据的适应性操作。在业务中使用了两种方式,下面做下记录:1.使用hive -e 'sql '2.JDBC方式-- 第一种方式 使用 hive -e 来执行命令-- 这种方式的有点是操作简单,无需其他关联操作,使用的模块时osos.system('hive -e "select * from ..."')...原创 2019-07-01 10:09:27 · 1696 阅读 · 0 评论 -
关于窗口函数的使用
Hive 窗口函数在计算部分与整体之间的关系中常用到,可以达到简化SQL,减少Hive 执行计划产生的MR数。实列:1需求:统计各城市用户在总体的占比数据结构:「user_city」表中有两个字段「user_name」,「city」,表示用户姓名与所在城市分析:上述需求中明显需要统计每个「城市」的用户数与「所有用户数」,然后做商得到最终结果实现1:不适用窗口函数se...原创 2019-03-30 10:29:31 · 373 阅读 · 0 评论 -
Excel数据导入hive
Hive导入Excel数据并不能使用类似一键导入的开关,只能先将数据进行格式转换,hive中简表,load数据的方式。打开Excel并另存为.txt格式文本文档excel与text转换 上传文件到HDFS 根据excel中的数据结构进行建表,注意结构顺寻要一致 load数据到hive表中,load data inpath '/hdfs/file/a.txt' into table tab...原创 2019-03-11 17:04:48 · 3306 阅读 · 0 评论 -
Hive 脚本--转义,引号的使用
在Hive脚本中需要对保留字符进行转义且Hue窗口支持使用单引号与双引号,但是脚本中与Hue中的使用是有差别的转义字符:如下SQL,使用Hive中的函数进行字符串分割select split('hello;hive;sql;hadoop',';')[0]上述SQL在Hue窗口可以正常数据「hello」但是在Hive脚本中会报错org.apache.hadoop.hive...原创 2019-03-01 16:45:59 · 8806 阅读 · 0 评论 -
UDF开发
hive版本:1.1.0-cdh5.14.0上次开发udf还是在培训的时候,只记得需要集成udf然后实现evaluate方法就可以了,但是用到的这个版本有了较大的改动,开发udf需要 继承genericUDF,而之前的udf也变成了弃用udf;genericUDF必须要实现的方法:initialize方法用于初始化,制定输入输出的类型 evaluate方法表达数据的处理逻辑 get...原创 2018-09-10 18:07:29 · 510 阅读 · 0 评论 -
hive复制分区表带数据
1.创建不带数据的表结构:create table new_table like old_table;2.创建带数据的表但是没有分区结构:create new_table as select * from old_table;3.创建带分区的表且包含数据: 先复制表结构用第一条语句 向表中插入数据:insert into new_table partition(sex = 'fam...原创 2018-09-19 20:49:53 · 1215 阅读 · 0 评论 -
hive表集群间的迁移
记录下工作中由于需要复制生产环境到测试环境以供测试使用做的一次数据库的迁移,方法比较繁琐,有待改进;基本思路:将生产环境的表导出到hdfs,将hdfs的数据get到本地,scp到测试环境的本地,put到测试环境的hdfs,再进行导入;hive表到处到hdfs: export table table_name to '/home/path'; 这里表名最好将库名也加上,后面的path...原创 2018-09-26 10:58:36 · 991 阅读 · 0 评论 -
shell开发hive,impala
在进行数据处理的时候想把hql,和impala的sql写成脚本来执行但是oozie并没有集成impala所以需要使用shell脚本来操作。简单的hive sql可以直接在shell脚本中写然后使用hive -e来执行比如:hive -e 'select * from tablea;'但是复杂的或者整个hql已经写好文件了这时候就需要使用shell来执行hive的hql文件了命令如下:...原创 2018-09-26 16:36:22 · 329 阅读 · 0 评论 -
关于访问增量问题的思考
问题:在访问日志中会出现会话中断但是用户未离开的情况,会产生两条或更多记录,但是这些记录都是一次访问的日志,希望可以合并记录;user_name arrived_time leave_time A 00:00 00:23 A 00:23 00:40 A 00:40 00:50 A 04:00 04::23 期望...原创 2018-09-27 17:42:28 · 283 阅读 · 0 评论 -
hive外部表指向多个文件/文件夹
hive建外部表正常指向一个文件或者文件夹时很简单,然而需求是指向两个不同的文件夹起上级目录中还有其他文件不能直接指定上级目录,特此记录。新建外部分区表 //新建外部分区表create external table test(content string) partitioned by(date string); 将不同的文件/文件夹指向不同分区即可 //递归读取...原创 2018-11-21 11:52:36 · 5048 阅读 · 2 评论 -
hive sql报错FAILED: SemanticException Line 0:-1 Both left and right aliases encountered in JOIN
在hql脚本时报错FAILED: SemanticException Line 0:-1 Both left and right aliases encountered in JOIN ,由于连接条件导致hql不能执行,网上查到了解决办法https://stackoverflow.com/questions/39852325/both-left-and-right-aliases-encounte...原创 2018-11-16 18:49:12 · 12261 阅读 · 0 评论 -
恢复 Hive 删除表,数据库
背景:CDH集群hue窗口操作,删除database;hive中使用 drop table或者drop database 删除数据之后是可以进行恢复的,truncate掉的数据目前无法恢复。删除掉的数据可以在trash文件夹中找到,点击restore恢复至删除前的文件位置,如果删除的时间比较久回收站被清除也无法恢复。恢复步骤:恢复数据至原位置 找到删除的文件夹...原创 2018-12-15 16:25:34 · 7046 阅读 · 2 评论 -
Tez替换MR作为hive的计算引擎
由于MR执行效率问题使用Tez替换MR,记录遇到的问题及解决方案原创 2018-12-25 20:31:46 · 5144 阅读 · 1 评论 -
Generic UDF开发测试
对于hive开发udf继承GenericUDF需要实现三个必要的方法initialize方法需要声明返回值类型 evaluate实现主要逻辑 getDisplayString(没研究明白)记录开发测试:1.在initialize方法中 什么都不写直接返回null,其他两种方法都写 --报错:FAILED: RuntimeException typeInfo cannot b...原创 2018-09-17 16:59:35 · 1642 阅读 · 1 评论