十八章 hive基础

发布于:2024-04-16 ⋅ 阅读:(156) ⋅ 点赞:(0)

1)

表的分区

大数据开发数据量较大,在进行数据查询计算时,需要对数据进行拆分,提升查询速度。

1-1 单个分区

单个分区时创建单个目录

1-2 多个分区

多个分区可以将数据拆分多个目录储存

注意点: 1 分组字段不能和表中字段重名
   
              2 动态分区数据写入时,select中字段顺序要和分区表中字段顺序一致

              3 分区字段在最后,所有select中的分区数据指定也放在最后


2)

1-1
表的分桶

分区:将数据拆分不同目录下存储

分桶:将数据拆分成不同文件进行存储

无论是分区还是分桶,本质都是对数据的拆分存储,作用是为了提升查询的效率

分桶表可以在进行数据写入时,根据写入数据的不同拆分到不同文件进行存储,在查询数据时,就可以读取不同文件获取数据

分桶的数据字段可以自己指定,分桶的数量,也就是拆分文件的数量也可以自己指定


2-1

分桶创建

格式:

create table 表名 ()clustered by (选择分桶的字段) into (选择分成几个通)buckets 

row format delimited fields terminated by ‘分隔符’;

使用分桶时,一般都是已经存在了一个原始数据表,为了提升原始数据速度,将原始数据在重新写入一个分桶表


2-2 

分桶原理说明

数据按照hash取余的方式进行拆分,写入到不同的文件中


逻辑 :hash(分桶字段)%分桶数  = 余数      hash方法互怼任意数据进行计算后得到一个唯一编号值

2-3

分桶的主要使用场景

多表关联  提升多表关联的查询效率

随机采样 


3)

数据文件的读取和写入

hive在对hdfs上的文件数据进行读取和写入数据时,


使用delimited 表示底层默认使用的serde类:LazySimpleSerDe类来处理数据

使用serde:表示指定其他的Serde类来处理数据,支持用户自定义SerDe类


3-1

默认序列化器

delimited 

在进行表定义时指定row format delimited

指定处理不同数据的方法

fields terminated by 字段的处理方法 指定如何分隔字段

collection items terminated by 指定字段中数组的分割分割方式

map keys terminated by 指定map的数据分割方式

3-1-1   array类数据类型

create table 表名(
  hoobby  array <string>) .... collection items terminated by ',' ;

3-1-2  struct类型数据

create table 表名(
 user  struct <name:string,age:int,gender:string>) ....collection items terminated by '#'


第一步  先按照逗号拆分数据

第二部  在将数组类型数据 拆分

第三步 在对数组中的数据转为map形式


3-1-3   map类型数据


collection items terminated by '-'

map keys map keys terminated by  '  :  '


* :  split (字段,’-‘)   字段内容转为数组

3-2

自定义序列化器

可以使用自定义序列化器中提供jar包完成对json数据的处理

可以将json文件中的数据key最为字段,将value值解析为对应的行数据

步骤:

按照json文件中的key定义表字段

顺序要一样

crearte table 表名 ()row format serde ’org.apche.hive.hcatalog.data.JsonSerDe‘   ;(指定三方的序列化器)


4 )

内置函数

 hive提供的函数方法,方便对不同类型的字段数据进行操作

4-1  字符串操作函数

计算字符串长度  length(name)

字符串拼接   concat(字段,字段)  没有拼接字符      

                     concat_ws(':', 字段,字段) 有拼接符
 
字符串切割   split(字段,’-‘)   数组取值   

                     split(字段,’-‘)[0]

字符串截取    substr(字段,1,4)  起始的字符位置书,截取的字符个数

字符串替换 regexp_replace(字段,’-‘,’/‘)

方法嵌套使用

例如:

trim 去除字符串的前后空格

select 字段 ,subst(trim(字段)1,4)from 表名

4-2

数值操作

取余操作   select 2%5 

取整操作   round ()   保留多少位置 round(。。。,2) 保留两位

向上取整  ceil(3.14)

向下取整 floor (3.14)

次方计算  pow (2,3)


4-3

条件判断

单个条件判断

select gender,if(gender =0 ,’男‘,’女‘)from 表名    ----  如果gender等于0则成立等于男,如果不是则是女

多个分类条件判断

case when

select age ,case    when age <= 18 then '少年'  when age >18 and age <=40  then ’青年‘   end as age_new  from 表名

判断数据是否为空

if(字段 = null,’‘,’‘)

nullif(1,1) , nullif(1,2) 

查看方法的使用形式  desc function extended nullif ;
 


网站公告

今日签到

点亮在社区的每一天
去签到