复杂(集合)数据类型
数据类型 | 描述 | 字面语法示例 |
STRUCT | 和C语言中的struct或者”对象”类似,都可以通过”点”符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, lastdt STRING},那么第1个元素可以通过字段名.first来引用 | struct( ‘John’, ‘Doe’) |
MAP | MAP是一组键-值对元组集合,使用数组表示法(例如[‘key’])可以访问元素。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取值’Doe’ | map(‘first’, ‘John’, ‘last’, ‘Doe’) |
ARRAY | 数组是一组具有相同类型的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第1个元素可以通过数组名[0]进行引用 | ARRAY( ‘John’, ‘Doe’) |
hive数据文件格式和压缩格式
- 文件格式
文件格式按面向的存储形式不同,分为面向行和面向列两大类文件格式。
面向行/列类型 | 类型名称 | 是否可切割计算 | 优点 | 缺点 | 适用场景 |
面向行 | 文本文件格式(.txt) | 可以 | 查看、编辑简单 | 无压缩占空间大、传输压力大、数据解析开销大 | 学习练习使用 |
面向行 | SequenceFile序列文件格式(.seq) | 可以 | 自支持、二进制kv存储、支持行和块压缩 | 本地查看不方便:小文件合并成kv结构后不易查看内部数据 | 生产环境使用、map输出的默认文件格式 |
面向列 | rcfile文件格式(.rc) | 可以 | 数据加载快、查询快、空间利用率高、高负载能力 | 每一项都不是最高 | 学习、生产均可 |
面向列 | orcfile文件格式(.orc) | 可以 | 兼具rcfile优点、进一步提高了读取、存储效率、新数据类型的支持 | 每一项都不是最高 | 学习、生产均可 |
- 压缩格式
压缩格式按其可切分独立性,分成可切分和不可切分两种。
可切分性 | 类型名称 | 是否原生支持 | 优点 | 缺点 | 适用场景 |
可切分 | lzo(.lzo) | 否 | 压缩/解压速度快 合理的压缩率 | 压缩率比gzip低 不原生、需要native安装 | 单个文件越大,lzo优点越越明显。压缩完成后>=200M为宜 |
可切分 | bzip2(.bz2) | 是 | 高压缩率超过gzip 原生支持、不需要native安装、用linux bzip可解压操作 | 压缩/解压速率慢 | 处理速度要求不高、要求高压缩率(冷数据处理经常使用) |
不可切分 | gzip(.gz) | 是 | 压缩/解压速度快 原生/native都支持使用方便 | 不可切分、对CPU要求较高 | 压缩完成后<=130M的文件适宜 |
不可切分 | snappy(.snappy) | 否 | 高速压缩/解压速度 合理的压缩率 | 压缩率比gzip低 不原生、需要native安装 | 适合作为map->reduce或是job数据流的中间数据传 |
表分类:主要分内表和外表
内表:元数据和数据本身均被hive管理。删除表则全部删除。
外表:元数据被hive管理,数据本身存储在hdfs,不受hive管理。删除表则只删除元数据,数据本身不变。
- 创建视图(虚表)
视图:本身不存储实际数据,只存储表关系,使用时再去通过关系查找数据。
查看所有视图:show views;
删除 drop voew student_view;
加载数据脚本
LOAD DATA INPATH '/tmp/tianliangedu/input_student_info/student.txt' OVERWRITE INTO TABLE student PARTITION ();
将查询结果插入到数据表中
- 脚本模板
INSERT OVERWRITE TABLE tablename1
[PARTITION (partcol1=val1, partcol2=val2 ...)]
select_statement1 FROM from_statement
- 样例
insert overwrite table student partition(come_date='20170905')
select
id,username,classid,classname
from student
where come_date='20170904';