Hive
文章平均质量分 62
i000zheng
这家伙很勤快!!
展开
-
Hive中JOIN的用法以及一些注意事项总结。
常见用法Hive表连接的语法支持如下:join_table: table_reference JOIN table_factor [join_condition] | table_reference {LEFT|RIGHT|FULL} [OUTER] JOIN table_reference join_condition | table_reference LEFT SEMI...原创 2018-05-15 09:52:39 · 6948 阅读 · 0 评论 -
Hive SQL转化为MapReduce执行计划深度解析
目录1. MapReduce实现基本SQL操作的原理1.1 Join的实现原理1.2 Group By的实现原理1.3 Distinct的实现原理2. SQL转化为MapReduce的过程2.1 Phase1 SQL词法,语法解析2.2 Phase2 SQL基本组成单元QueryBlock 2.3 Phase3 逻辑操作符Operator和逻辑操作树Operator...原创 2018-07-18 11:28:24 · 8132 阅读 · 3 评论 -
Hive创建自己的UDF并永久化详细记录
1.UDF是什么?hive的类SQL预发给数据挖掘工作者带来了很多便利,海量数据通过简单的sql就可以完成分析,有时候hive提供的函数功能满足不了业务需要,就需要我们自己来写UDF函数来辅助完成,下面用一个简单的例子说明过程,以及注意事项。UDF函数其实就是一个简单的函数,执行过程就是在Hive转换成mapreduce程序后,执行java方法,类似于像Mapreduce执行过程中加入一个插件,方...原创 2018-07-11 14:45:36 · 3068 阅读 · 0 评论 -
用分桶解决动态分区最后一轮reducer数量过少导致运行缓慢问题。
场景动态分区时,最后一轮reduce会按照字段的值作为key去分发数据到不同的reducer,但是如果分区值的数量过少,就会导致严重的数据倾斜。运行时间过长。任务growth.m_device_impression.sql中,由于p_app_name是分区字段,而目前只有三个可能的值,所以最后一轮按key分发任务时,只有三个reducer。其中某个值的那个reducer要跑一个小时。这是由于数据倾...原创 2018-07-10 18:14:05 · 1183 阅读 · 0 评论 -
Hive的WITH table_name AS ..语句优化性能
Hive的WITH语句会将表预先加载入内存,在以提高代码运行效率。一.WITH AS的含义WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到。有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL的不同部分,作为提供数据的部分。特别对于UNION ALL比较有用。因为UNIO...原创 2018-07-09 14:44:39 · 7531 阅读 · 2 评论 -
hive的strict模式下where,group by,having,order by同时使用的执行顺序
主要限制三种情况(1) 有partition的表查询需要加上where子句,筛选部分数据实现分区裁剪,即不允许全表全分区扫描,防止数据过大(2) order by 执行时只产生一个reduce,必须加上limit限制结果的条数,防止数据量过大造成1个reduce超负荷(3) join时,如果只有一个reduce,则不支持笛卡尔积查询。也就是说必须要有on语句的关联条件,做自然连接。group by...原创 2018-06-20 14:41:00 · 1532 阅读 · 0 评论 -
Hive数据去重方法记录
Hive数据去重语句insert overwrite table ad_click_info select t.ad_id,t.ad_date from ( select ad_id, ad_date , row_number() over(distribute by ad_id sort by ad_date ...原创 2018-06-26 15:57:25 · 3998 阅读 · 0 评论 -
HIVE和HBASE
1. 两者分别是什么? Apache Hive是一个构建在Hadoop基础设施之上的数据仓库。通过Hive可以使用HQL语言查询存放在HDFS上的数据。HQL是一种类SQL语言,这种语言最终被转化为Map/Reduce. 虽然Hive提供了SQL查询功能,但是Hive不能够进行交互查询--因为它只能够在Haoop上批量的执行Hadoop。 Apache HBase是一种Key/Value...翻译 2018-06-19 16:38:04 · 206 阅读 · 0 评论 -
Hive中SUM结果不对的Bug记录
SUM之后的结果变小sum一个表的结果,和直接sum子查询返回的结果不一致。检查发现是表使用了bigint字段,sum之后返回的数值是科学计数法,再转回bigint的时候会出错,返回null值。从而漏掉统计部分数据...原创 2018-06-19 14:27:19 · 4114 阅读 · 0 评论 -
Hive中GroupBy的实现原理
例子hive> SELECT * FROM logs;a 苹果 5a 橙子 3a 苹果 2b 烧鸡 1 hive> SELECT uid, SUM(COUNT) FROM logs GROUP BY uid;a 10b 1计算过程默认设置了hive.map.aggr=true,所以会在mapper端先group by一次,最后再把结果merge起来,为了减...原创 2018-06-19 14:24:12 · 2061 阅读 · 0 评论 -
Hive组件及Hive执行流程
1、组件:元存储(Metastore )-存储“系统目录以及关于表、列、分区等的元数据”的组件。驱动(Driver )- 控制 HiveQL 生命周期的组件,当 HiveQL 查询穿过 Hive时。该驱动管理着会话句柄以及任何会话的统计。查询编译器(Query Compiler) - 是一个组件,将HiveQL编译成有向无环图(directed acyclic graph, DAG)形式的map/...原创 2018-06-21 18:02:46 · 2145 阅读 · 0 评论 -
Hive学习笔记——DDL和DML基础语句
1. DDL 操作:数据定义语音创建简单表hive> CREATE TABLE pokes (foo INT, bar STRING); 创建外部表:CREATE EXTERNAL TABLE page_view(viewTime INT, userid BIGINT, page_url STRING, referrer_url STRING, ip STRING CO...原创 2018-06-21 17:58:12 · 261 阅读 · 0 评论 -
Hive中索引,分区,分桶的对比
一、索引Hive支持索引,但是Hive的索引与关系型数据库中的索引并不相同,比如,Hive不支持主键或者外键。Hive索引可以建立在表中的某些列上,以提升一些操作的效率,例如减少MapReduce任务中需要读取的数据块的数量。为什么要创建索引?Hive的索引目的是提高Hive表指定列的查询速度。没有索引时,类似'WHERE tab1.col1 = 0' 的查询,Hive会加载整张表或分区,然后处理...原创 2018-05-30 15:06:59 · 1897 阅读 · 0 评论 -
Hive中索引的使用及注意事项
索引的作用Hive支持索引,但是Hive的索引与关系型数据库中的索引并不相同,比如,Hive不支持主键或者外键。Hive索引可以建立在表中的某些列上,以提升一些操作的效率,例如减少MapReduce任务中需要读取的数据块的数量。在可以预见到分区数据非常庞大的情况下,索引常常是优于分区的。虽然Hive并不像事物数据库那样针对个别的行来执行查询、更新、删除等操作。它更多的用在多任务节点的场景下,快速地...原创 2018-05-24 16:43:21 · 17493 阅读 · 0 评论 -
Hive表保存数据到Excel做数据比对
由于工作需要,将一些数据库要从hive中迁移到clickhouse中,迁移完成后需要核对数据。在此记录将hive中和clickhouse中两张表做数据对比时遇到的一些问题。1.hive 保存数据hive保存数据用的是linux下的重定向。新建一个hive查询,通过>重定向到文件hive -e "select dt, count(*), sum(realcost) from tablename...原创 2018-05-24 14:43:12 · 2638 阅读 · 0 评论 -
Hive导入导出数据(本地,hdfs,其他表)
从本地导入hive> LOAD DATA LOCAL INPATH '/home/username/hivedata/source.txt' INTO TABLE tablename PARTITION(create_time='2018-01-01'); 导出到本地--不能使用insert into local directory来导出数据,会报错--只能使用insert overwri...原创 2018-05-22 11:22:40 · 2529 阅读 · 0 评论 -
hive跨库读取数据出现的bug记录
场景在mysql查询数据,并保存到临时文件。然后在hive中读取数据时,发现存在一个异常数据,其string类型字段的值都为字段名,double类型的字段的值都为0。分析原因应该是mysql保存数据时,保存了表头,然后hive读取时,将表头当做一条数据读取了。解决方案:LOAD DATA INFILE '/tmp/test.txt' INTO TABLE test IGNORE 1 LINES; ...原创 2018-05-15 09:59:56 · 1552 阅读 · 0 评论 -
hive合并小文件的配置项
〇. 启动压缩set hive.exec.compress.output=true;set mapreduce.output.fileoutputformat.compress=true; 一. 输入合并:当有大量小文件时,启动合并,减少map数。set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputF...原创 2018-07-19 17:09:33 · 4802 阅读 · 0 评论