• hive运行流程 
  • hive数据模型
  •  
  • hive测试工具 hivestack_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