1.hive的集中join方式和使用场景,map-side join的reduce-side join适用场景
2.复杂查询的单标过滤条件使用位置,where和on的区别,涉及列裁剪,分区裁剪;
列裁剪优化:
select * from order_table limit 10;优化后只读取需要的数据列
select user,item from order_table limit 10;
分区裁剪优化使用查询条件添加分区:
select count(orderid) form order_table where[i] dt='2014-11-11' [/i]and to_data(sale_time)='2014-11-11' and hour(to_date(sale_time))=10
判断扫描的分区有个explain dependency帮助语法可以看出扫描的分区,帮助优化hiveql
如果join的key相同优化减少JOB数:
select a.val,b.val,c.val from a join b on (a.key = b.key1) join c on [i](b.key1=c.key)[/i];// 不要使用c.key = b.key2
muti-insuert,union all使用
muti-insert使用
insert overwrite table tmp1 select ... from a where 条件1
insert overwrite table tmp1 select ... from a where 条件1
//优化后
from a
insert overwrite table tmp1 select ... where 条件1
insert overwrite table tmp1 select ... where 条件2;
避免笛卡尔积:
select ...
from order_table ot
left outer join(
selct * from order_table_info oti
where (oti.mobile <> 'unkenwun' or oti.imsi <> 'unkenown')
and oti.imei<> 'unknuwn'
and oti.pt='$data_desc'
) a
on ot.app_id=a.app_id and oti.imei=a.imei
//提桥过滤,使用on作为条件
join前过滤掉不需要的数据:
//以下应该先进行过滤分区,再执行子查询
select a.val,b.val from a.left outer join b on (a.key=b.key)where a.ds='2009-07-07' and b.ds =''2009-07-07
//优化后
select x.val,b.val from (select key,val from a where a.ds='2009-07-07') x left outer join (select key,val from b where b.ds = '2009-07-07') y
on x.key=y.key
3.distribute by/sort by/cluster by/order by语法的使用和区别
//distinct 和 group by 尽量避免使用distinct,用group by代替
select distinct key from table
select key from table group by key
//order by优化
1.order by在全局有序,所以要排序是在一个reduce中实现,不能并发执行。
2.sort by部分实现排序,单个reduce输出的结果是有序的,效率高,通常和distribute by关键字一起使用
3.cluster by col 等价于distribute by col sort by col1 但是不能分配排序的规则和权重
4.hive函数使用:
(京东自己开发sysdate()),date_format(),concat,substr,like,split,explode 等
select col1,col2,newCol from table lateral view explode(myCol) adTanle as newCol
//使用explode进行转换,按照不同维度进行订单汇总
select type,code,sum(sales) from(
select split(part,'_')[1] as type,
split(part,'_')[0] as code,
sales from order_table LATERRAL VIEW explode(split(concant(province,'_1-',city,'_2-',country,'_3-')))
adTable AS part
)df group by type,code;
5.union all注意事项
union all在不同表相当于是multiple inputs,同一个表下相当于map一次输出多条
hive对union all的查询只限于非嵌套查询
select * from (
select c1,c2,c3 from t1 group by c1,c2,c3
union all
select c1,c2,c3 from t2 group by c1,c2,c3)
t3;
//如果t1和t2比较小的话使用下边的写法
select * from
(select * from t1
union all
select * from t2
)t3
group bu c1,c2,c3;
不同表太多的union all操作可以使用创建临时分区
insert overwrite table test (flag='1')
select sndaid,mobile from test1
insert overwrite table test (flag='2')
select sndaid,mobile from test2
6.数据倾斜的原因和解决方式
//数据倾斜
任务长时间维持在99%,查看任务页面发现只有少量的reduce子任务未完成,因为此处的reduce和其他的reduce差异过大,单一的reduce的记录数与平均数差异过大
[size=x-large]7.hive分区表(EDW常见的几种分区表)更有效的查询方法[/size]
8.多表插入
9.hive NULL值关联:
10.动态分区:
//设置参数
set hive.exec.dyanmic.partition=true
set hive.exec.dyanmic.partition.mode=nonstrict
//创建动态分区表
create table test(
sndaid string,
mobile string,
)partitioned by (dt string)
stored an rcfile;
//插入动态分区数据
insert overwrite table test partition(dt)
select sndaid,mobile.dt feom test2
11.数据采样:
分享到:
相关推荐
Hive是基于Hadoop的大数据仓库管理系统,提供了类SQL的数据操作语言DML,用于操作数据表中的数据,例如数据的加载、查询和插入等操作。下面是Hive数据操作语言的详细讲解: 加载文件 加载文件是Hive中常见的数据...
在实际工作中,理解并熟练运用这些Hive的DML操作,能够有效地管理和分析大数据集。对于“产品说明.zip”和“文档.pdf”,它们可能包含了更深入的操作指南、示例代码以及最佳实践,帮助用户更好地理解和应用Hive的DML...
本章节重点讨论HiveSQL中的DML操作,特别是加载数据到Hive表的过程。 首先,当我们创建一个Hive表后,Hive会在HDFS(Hadoop分布式文件系统)上建立一个与该表对应的文件夹。默认的存储位置由参数`hive.metastore....
在 Hive 中,可以使用 DML(数据操作语言)来对表进行增删改操作。
- **DML操作**(Data Manipulation Language,数据操作语言): - **数据插入**: - `INSERT INTO`语句用于向表中插入数据。 - **数据更新**: - Hive不支持传统的`UPDATE`语句,但可以通过替换数据文件来实现...
8.5 DML操作 44 8.6 HAVING 44 8.7 子查询 44 8.8 Join中处理null值的语义区别 44 9. 优化与技巧 47 9.1 全排序 47 9.1.1 例1 48 9.1.2 例2 51 9.2 怎样做笛卡尔积 54 9.3 怎样写exist/in子句 54 9.4 怎样决定...
4. **Hive数据类型**:Hive支持多种数据类型,包括基本类型(如STRING, INT, BOOLEAN)和复杂类型(如ARRAY, MAP, STRUCT)。 5. **HQL语法**:HQL支持SELECT, FROM, WHERE, GROUP BY, JOIN等SQL关键字,允许用户...
- DML(Data Manipulation Language):主要用于数据的插入、更新和删除操作,Hive 的 DML 功能相对有限,主要集中在查询和聚合上。 1.4 其他功能 - 支持 ALTER TABLE 添加列。 - 分区功能:允许根据特定字段(如...
用户可以通过SQL-like语言(HQL)提交查询,Hive则负责将这些查询转换为一系列MapReduce任务执行。 - **数据存储**:Hive的数据存储建立在HDFS之上,不使用特定的数据格式,也不支持索引。用户可以自定义列和行的...
2. **Hive数据建模** - **表的创建**:Hive中的表可以分为分区表和非分区表,分区有助于提高查询效率,将大表划分为更小、更易管理的部分。 - **数据类型**:Hive支持多种数据类型,包括基本类型(如STRING、INT、...
4. **HQL语言**:详尽解析HQL(Hive Query Language),包括DML(数据操作语言)、DDL(数据定义语言)和DCL(数据控制语言)的操作,如SELECT、INSERT、UPDATE、DELETE、CREATE TABLE、ALTER TABLE等语句的使用。...
2. **Hive表DML操作** - **导入数据**: 将外部文件中的数据导入到Hive表中。 - **Select 操作**: 使用SELECT语句查询数据。 - **插入查询结果**: 将查询结果插入到另一个Hive表中。 - **写入文件**: 将查询结果...
Hive Hook 是Apache Atlas 提供的一种机制,用于在Hive 执行DDL(数据定义语言)和DML(数据操纵语言)操作时触发Atlas 的元数据事件,从而实现实时的元数据跟踪和管理。 在Apache Atlas 2.0.0 中,Hive Hook 主要...
Hive 提供了一个类似 SQL 的查询语言——HiveQL,使得非 MapReduce 开发者也能方便地进行大数据分析。此外,Hive 还允许 MapReduce 开发人员通过编写自定义的 mapper 和 reducer 来执行更复杂的计算任务。 **1. ...
### Hive数据查询 Hive的数据查询主要通过HiveQL语句进行,包括选择数据、过滤数据、连接表、分组和聚合数据等操作。由于底层使用MapReduce执行,Hive查询可以处理非常大的数据集,但可能不适合需要低延迟的应用...
4. **简单易用**:Hive提供了丰富的数据类型、数据模型以及DDL和DML语句,使得数据的加载、查询、更新等操作变得简单直观。 #### 三、Hive的数据模型与类型 Hive支持多种数据类型,包括原始类型如整型(int、bigint...
2. **SQL-like 查询**:Hive 提供了 HQL,一种结构化查询语言,使得用户能够用 SQL 的语法来操作和查询分布式数据,尽管它并不完全符合标准 SQL,但在很多方面与之相似。 3. **MapReduce 计算**:Hive 查询被转化为 ...
Hive提供了丰富的操作,用户可以进行数据的增删改查(DML)等操作。尽管HiveQL是一种类SQL语言,但它也有一些自定义的功能,可以用来处理复杂的数据分析任务。 ### 结语 这篇笔记提供了Hive的全面知识点,特别是...
- **DML操作**:Hive不支持标准的DML操作,如UPDATE和DELETE。 - **HAVING子句**:HAVING子句用于过滤聚合后的结果。 - **子查询**:子查询可以嵌套在其他查询中,但需要注意性能问题。 - **处理NULL值**:JOIN操作...
- **DML**:数据操纵语言,包括插入数据、更新数据和删除数据,Hive 主要支持 DDL,但也有部分 DML 功能,如 `INSERT OVERWRITE` 和 `SELECT` 查询。 **1.4 其他功能** - **列添加**:可以使用 ALTER TABLE 命令向...