# hive指南 hive是什么? hive是基于hadoop构建的数据仓库基础架构,通过提供一系列的工具,使得用户能够方便的做数据ETL,数据结构化,并针对存放在hadoop上的海量数据进行查询和分析。 hive定义了一种简单的类SQL查询语言---QL,QL语言方便熟悉SQL语言的用户去查询数据。此外,hive也支持熟悉map-reduce的开发者使用map-reduce程序对数据做更加复杂的分析。 hive可以很好的结合thrift和控制分隔符,也支持用户自定义分隔符。 hive不是什么? hive基于hadoop,hadoop是批处理系统,不能保存低延迟,因此,hive的查询也不能保证低延迟。 hive的工作模式是:提交一个任务,等到任务结束时被通知,而不是实时查询。相对应的是,类似于oracle这样的系统当运行于小数据集的时候,响应非常快,可当处理的数据集非常大的时候,可能需要数小时。需要说明的是,hive即使在很小的数据集上运行,也可能需要数分钟才能完成。 总之,低延迟不是hive追求的首要目标。hive的设计目标是:可伸缩、可扩展、容错及输入格式松耦合 **数据单元** 按照数据粒度大小,hadoop可以被组织成: 1\. databases: 避免不同表产生命名冲突的一种命名空间 2\. tables:具有相同scema的同质数据的集合 3\. partitions:一个表可以有一个或多个决定数据如何存储的partition key 4\. buckets(clusters):在同一个partition中的数据可以根据某个列的hash值分为多个bucket partition和bucket并非必要,但是,它们能大大加快数据的查询速度 **数据类型** 简单类型: TINYINT - 1 byte integer SMALLINT - 2 byte integer INT - 4 byte integer BIGINT - 8 byte  BOOLEAN - TRUE/ FALSE FLOAT - 单精度 DOUBLE - 双精度 STRING - 字符串集合 复杂类型: Structs: structs内部的数据可以通过DOT(.)来存取,例如,表中一列c的类型为STRUCT{a INT; b INT},我们可以通过c.a来访问域a Maps(K-V对):访问指定域可以通过["指定域名称"]进行,例如,一个Map M包含了一个group-》gid的kv对,gid的值可以通过M['group']来获取 Arrays:array中的数据为相同类型,例如,假如array A中元素['a','b','c'],则A[1]的值为'b' **语言能力** hive查询语言提供基本的类sql操作,这些操作基于table和partition,包括: 1.使用where语句过滤制定行 2.使用select查找指定列 3.join两张table 4.group by 5\. 一个表的查询结果存入另一张表 6.将一个表的内容存入本地目录 7.将查询结果放在hdfs上 8.管理table和partition(creat、drop、alert) 9.在查询中嵌入map-reduce程序