- hive运行流程?
-
hive数据模型
-
? -
数据类型
-
?数据类型
TINYINT | 1-byte signed integer from -128 to 127 | SMALLINT | 2-byte signed integer from -32,768 to 32,767 | INT INTEGER | 4-byte signed integer from -2,147,483,648 to 2,147,483,647 | BIGINT | 8-byte signed integer from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 | FLOAT | 4-byte single precision floating point number | DOUBLE | 8-byte double precision floating point number PRECISION? | DECIMAL | Decimal datatype was introduced in Hive0.11.0 (HIVE-2693) and revised in Hive 0.13.0 (HIVE-3976) |
- 日期类型
-
TIMESTAMP | UNIX时间戳和可选的纳秒精度 | DATE | 描述特定的年/月/日,格式为YYYY-MM-DD |
- 字符串
-
string | 最常用的字符串格式,等同于java String | varchar | 变长字符串,hive用的较多,最长为65535 | char | 定长字符串,比varchar更多一些,一般不要超过255个字符 |
- 布尔类型
-
类型 | 说明 | boolean | 等同于java的boolean用的很少 |
- 复杂数据
-
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数据流的中间数据传输格式 |
- 数据操作分类
-
操作分类 | 具体操作 | sql备注 | DDL | ?建表 ?删除表 ?修改表结构 ?创建/删除视图 ?创建数据库? ?显示命令 | Create/Drop/Alter Database Create/Drop/Truncate Table Alter Table/Partition/Column Create/Drop/Alter View Create/Drop Index Create/Drop Function Show functions; Describe function; | DML | ?数据插入(insert,load) | load data...into table insert overwrite table? | DQL | ?数据查询(select) | |
- hiveSQL
- DDL
-
1.2 建表模板 CREATE [external] TABLE [IF NOT EXISTS] table_name [(col_name data_type [comment col_comment], ...)] [comment table_comment] [partitioned by (col_name data_type [comment col_comment], ...)] [clustered by (col_name, col_name, ...) [sorted by (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] [row format row_format] [stored as file_format] [location hdfs_path] - 关键词解释
- external: 创建内部表还是外部表,此为内外表的唯一区分关键字。
- comment col_comment: 给字段添加注释
- comment table_comment: 给表本身添加注释
- partitioned by: 按哪些字段分区,可以是一个,也可以是多个
- clustered by col_name... into num_buckets BUCKETS:按哪几个字段做hash后分桶存储
- row format:用于设定行、列、集合的分隔符等设置
- stored as : 用于指定存储的文件类型,如text,rcfile等
- location : 设定该表存储的hdfs目录,如果不手动设定,则采用hive默认的存储路径
- 查看已存在表的详细信息
-
show create table或者desc tablename/desc formatted tablename - 创建视图(虚表)
-
视图:本身不存储实际数据,只存储表关系,使用时再去通过关系查找数据。 查看所有视图:show views;
-
DML
-
2.1 加载数据脚本 LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)] - 加载HDFS数据文件的脚本
-
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 多插入模式(一次查询多次插入) - 模板
-
FROM from_statement INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol=val)] select_statement1?? [INSERT OVERWRITE TABLE tablename2 [PARTITION ...] select_statement2 ... 动态分区模式(让分区成为被查询出来的结果表的字段名称变量) - 脚本模板
-
INSERT OVERWRITE TABLE tablename PARTITION (col_name) select_statement FROM from_statement - 设置非严格模式
-
set hive.exec.dynamic.partition.mode=nonstric;
-
DQL
-
3.1 脚本模板 SELECT [DISTINCT] select_expr, select_expr, ... FROM table_reference [WHERE where_condition] [GROUP BY col_list [HAVING condition]] [ CLUSTER BY col_list ? ?| [DISTRIBUTE BY col_list] [SORT BY| ORDER BY col_list] ] [LIMIT number] - DISTRIBUTE BY col_list
-
以指定字段作为key作hash partition,保证相同的key会到同一个reduce去处理。 - Sort By?col_list
-
以指定字段作为单个reduce排序的key,保证单个reduce内的key有序排列输出。 - Order By col_list
-
只会生成一个reduce任务,对全部排序 - CLUSTER BY col_list
-
以指定字段作为key做hash partition,保证相同key会到同一个reduce去处理。该命令相当于distributed by col_list和sort by col_list的联合使用。
-
Hive系统函数
- 查看所有系统函数
-
show functions -
|