在工作中要做到指定字段,不要用select *
如果后期使用列式存储的时候,性能会差别很大
select empno,ename from ruoze_emp;
当普通的查询的时候是不会跑mapreduce的
与关系型数据库没有差别
一定要考虑清楚,日志进来都是无规则的
对于过滤的东西,写的时候一定要慎重
sql语句的基本操作
聚合函数 多进一出
聚合的需要跑mapreduce
分组函数
where 是作用在所有的记录之上的
分组之后的条件一定要用having
写case 格式
select ename,sal,
case
when sal>1 and sal<=1000 then
else ‘highest’ end
from ruoze_emp;
注意:
大数据里面处理数据倾斜是比较常见的
将a表中 数据倾斜 作为 a1
数据不倾斜 作为 a2
将处理结果进行union all
处理
我们将他们各自的结果
统计出来,用一张临时表
中间采用 union all
a = a1 + a2
a1表示不倾斜的
a2表示倾斜的
通过 union all 就可以拿到
中间结果了
a1 union a2
将正常的捞出来
将不正常的捞出来
分开处理
处理完成后,将结果union
show function;
描述hive里面所有的内置函数
desc function extended upper;
hive 函数里面大量的函数带有示例
直接通过show function
不要用 insert into table dual value
insert into 需要执行mapreduce
时间戳在工作中经常使用的
带格式的处理方式
相互转换
spark 都支持这些函数
date类型只包含年月日,不包含时分秒的
year month day hour minute seconds都是支持的工作中常用
cast 类型转换
cast (value as )
cast 如果转换失败就是int类型
字符串最常用的substr
desc function extend substr;
stbstring( 从1 开始 如果是-1就是反方向)
select concat(“ruoze”,“jepson”) from
concat_ws
可以使用数组逗号分隔,进行逗号分隔
这个函数工作中用的非常非常多
split 这个函数是切开的
正则表达式注意
注意这个函数 explode的用法
一行给变成多行
数组类型的定义方式 array
row format delimited fields terminated by ‘,’
COLLECTION ITEMS TERMINATED BY ‘:’; 集合使用:分割
去重操作 select distinct from(select
使用hive 完成wordcount统计
很多知识点,一一进行剖析
做事情需要一步一步来
hive 处理数据的方式
select a1.f1,count(1) sumCount from
(
select explode(split(sentence,",")) f1 from ruoze_wc
) as a1 group by a1.f1
子查询必须加上别名
全表扫描,需要做分区
下面有分区字段
减少io提升效率
分区表
create table order_partition(
orderNumber string,
event_time string
) partitioned by (event_month string)
row format delimited fields terminated by ','
进行创建
月份string类型
普通的表load 是不用partitioned的,
但是分区表是要指定partitioned的
load data local inpath '/home/hadoop/data/order.txt' into table
order_partition partition (event_month='2014-05');
分区字段=分区值
看到这个结果就是分区表
手动创建了一个分区,将数据put上去
分区表查询的时候需要将分区字段where条件加上,否则还是全表扫描
元数据是没有的,所以是不能够使用的
刷新分区的概念
重新刷新分区 MSCK PEPAIR order_partition
就是向元数据写入数据
repair:added partiton to metastore
注意这个功能不要用,是刷新所有分区数据的
生产上拒绝使用这个,效率非常低
生产上需要使用的是 alter table order_partition add partition(event_month='2014-07');
生产上使用这个刷新元数据
show partitions order_partition;
三个分区查看数据
show create table ruoze_emp;
查看表的创建方式
分区表的字段是不能出现在
表字段里面的
注意导入的部分不能够写*
因为如果写* 连分区部分都添加上了
分区字段写在最后
这个是最为重要的生产操作
如果是两个分区字段,将最后两个对应上
这个是要求
这个的后面的条件就不需要了
insert overwrite table ruoze_emp_partition PARTITION(deptno)
select empno,ename,job,mgr,hiredate,sal,comm,deptno from ruoze_emp;
重点分区字段
与partition(deptno)
必须一致
注意 必须修改
set hive.exec.dynamic.partition.mode=nonstrict;
非严格模式
需要在xml配置
根据日志信息进行调整