首页 技术 正文
技术 2022年11月21日
0 收藏 981 点赞 3,418 浏览 1530 个字

前面提到了Hive的知识点非常零散,我不知道该怎么把这些知识点分类,跟SQL关系没那么大的就放在这一篇吧。

Hive Serde

参考Hive Serde

Serde是啥

Serde是序列化和反序列化的简称。为啥这么说?序列化是Serializer,反序列化是Deserializer,各取前几个字母一拼就成了。Hive里的序列化和反序列化干嘛用的?简单的说,就是在HDFS文件和表数据之间做转换。

  • Hive使用Serde(还有文件格式化)来读写表记录。
  • 读数据:HDFS文件->输入文件格式->键值对->反序列化->行对象。
  • 写数据:行对象->序列化->键值对->输出文件格式->HDFS文件

注意:键值对的键在读数据的时候会被忽略,在写数据的时候是个常量。基本上行对象只存储值。org.apache.hadoop.hive.serde这个类已经不推荐使用了,要使用新的org.apache.hadoop.hive.serde2。

Hive使用这些文件格式化的类来读写HDFS文件:
TextInputFormat/HiveIgnoreKeyTextOutputFormat: 读写些文本格式的文件
SequenceFileInputFormat/SequenceFileOutputFormat: 读写Hadoop SequenceFile格式的文件。SequenceFile里存储二进制的键值对。

针对不同格式的数据,Hive提供了不同的序列化/反序列化处理类(通俗地说,就是从特定格式的数据文件中提取想要的内容或者把内容写成特定格式的数据文件),详细信息请参考官网,这里不再赘述。

动态分区

静态分区必须手工给分区字段赋值,其结果是一个文件的所有数据都属于同一个分区。这不是我们想要的,我们希望能够根据文件中某个字段来将数据散列到不同的分区中。动态分区就是解决这个问题。

--动态分区语法:
INSERT OVERWRITE TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...) select_statement FROM from_statement;
INSERT INTO TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...) select_statement FROM from_statement;

从上可知,动态分区表的记录必须是从其他已经存在的表里获取的,不能直接从文件加载。

分桶

分桶有点像分区。分区是把数据文件放到不同的目录下,分桶是把数据放到同一个目录的不同的文件中。建分桶表的时候,会指定一个分桶的字段,根据桶的数量来计算散列到哪个桶里。分桶的好处是,可以更快地从不同的桶中获取抽样数据。

首先设置分桶参数
set hive.enforce.bucketing = true; CREATE TABLE user_info_bucketed(user_id BIGINT, firstname STRING, lastname STRING)
COMMENT 'A bucketed copy of user_info'
PARTITIONED BY(ds STRING)
CLUSTERED BY(user_id) INTO 256 BUCKETS;FROM user_id
INSERT OVERWRITE TABLE user_info_bucketed
PARTITION (ds='2009-02-25')
SELECT userid, firstname, lastname WHERE ds='2009-02-25';

上面的例子,根据user_id字段,把数据分散到256个桶里。可以看到,分桶表的数据也只能从其他已经存在的表获取。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,075
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,551
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,399
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,811
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,892