1 hive基本概念
Hive是一个以Apache Hadoop为基础的数据仓储基础设施。Hive的设计目标是使得数据汇总更加简单和针对大容量数据的查询和分析。
Hive的SQL为用户提供了多种地方来融合他们自己的方法实现自定义分析;
Hive不是为事务联机处理设计的。它是用于处理传统数据仓储任务。
2 Hive数据组织结构
- Databases:命名空间方法用来避免tables,views,partitions,columns等等的命名冲突。Databases也可以用于加强用户或者一组用户的安全性。
- Tables: 拥有相同的schema被看成是同种数据单元。下面是page_views表的例子,每一行包括以下的列(schema):
timestamp
—当网页被浏览时UNIX timestamp一致的INT类型的数据userid
—用来识别浏览该页面的用户的BIGINT类型的数据page_url —
获取网页位置的STRING类型的数据referer_url—
用于获取用户所在当前页面的位置的STRING类型的数据。IP—
用于获取页面请求时的IP地址。
- Partitions:每个页面都拥有一个或者多个Key来决定数据如何存储。Partitions——除了存储单元——也允许用户高效地识别满足指定标准的行。例如,STRING类型的 data_partition和STRING 类型的country_partition。每一个独一无二的partition key值定义一个Table的partition。例如,US时间的“2009-12-23”是page_views table的一个partition。因此,如果你只想分析2009-12-23的“US”数据,你可以运行在该table相关的partition上,从而提高分析效率。然而需要说明的是,只是因为有一个partition名字为2009-12-23并不意味着它包含所有或者只是该日期的数据。partition用时间命名只是为了方面。维持partition名字和数据内容之间的映射关系是用户的工作。Partition列是虚拟列,本身不是数据的一部分而是在加载中派生出来的。
- Buckets (or Clusters):基于对表中一些列的hash方法得出值来将每个partition中的数据分到不同的Buckets中。例如,page_views表可能通过userid表中不同于其他partition列的列来bucket。这可以用于有效地获取样本。
Hive支持原始和复杂数据类型,正如下面多描述的。可以在Hive Data Types中查看更多信息。
3.1 原始类型
- 数据类型是跟表中的列相关的,支持下面的原始类型:
- Integers
- TINYINT—1个字节的整型
- SMALLINT—2个字节的整型
- INT—4个字节的整型
- BIGINT—8个字节的整型
- Boolean type
- BOOLEAN—TRUE/FALSE
- Floating point numbers
- FLOAT—单精度
- DOUBLE—双精度
- Fixed point numbers
- DECIMAL—用户定义的大小和精度的固定的点值
- String types
- STRING—指定字符集的字符串
- VARCHAR—指定字符集最大长度的字符串
- CHAR—指定字符集和长度的字符串
- Date and time types
- TIMESTAMP— 纳秒精度的特定时间点
- DATE—日期
- Binary types
- BINARY—字节序列
类型的层次结构如下(父类是所有子类实例的超类型):
- Type
- Primitive Type
- Number
- DOUBLE
- FLOAT
- BIGINT
- INT
- SMALLINT
- TINYINT
- SMALLINT
- INT
- BIGINT
- STRING
- FLOAT
- DOUBLE
- BOOLEAN
- Number
- Primitive Type
类型层级定义了类型在查询语言中的隐性转换。隐性转换允许子类转换成父类。所以当一个查询表达式需要type1但是数据是type2,type1在层级结构中是type2的父类,那么type2可以转换成type1.需要说明的是类型层级允许STRING转换成DOUBLE。
明确的类型转换可以用下面部分#Built In Functions中的cast操作符来实现。
扫描二维码关注公众号,回复:
1543266 查看本文章
3.2 复杂类型
复杂类型可以用原始类型和其他组合类型来组合:
- Structs:类型里面的元素可以用.符号来获得。举个例子,一个列c的类型是STRUCT{a INT;b INT},那么里面的a可用c.a来访问。
- Maps (key-value tuples): 元素可用[‘元素名’]来访问。例如,在一个map M中包含一个一个键值对‘group’->gid,那么gid的值可以用M[‘group’]来获得。
- Arrays (indexable lists): 数组中元素必须是同种类型。元素可以通过[index]来获得。举个例子,A数组拥有元素[‘a’,’b’,’c’],那么A[1]会返回‘b’。
使用原始数据类型和创造复杂类型的架构,任意级别的嵌套类型都可以被创造。例如,对于一个类型,用户可能包含下面的字段:
- gender—which is a STRING.
- active—which is a BOOLEAN
4 hive能功能
Hive's SQL 提供基础 SQL操作. 这些操作是用在表和partition上,这些操作是:
-
- 用WHERE来过滤表中的行
- 用SELECT从表中来选择确定的行
- 两表联合
- Ability to evaluate aggregations on multiple "group by" columns for the data stored in a table.(翻译不出来T T)
- 将查询的结果存储到另一个表中
- 将表中内容下载到本地目录
- 将查询结果存储到hadoop dfs目录
- 管理tables和partitions(新建,移除和更改)
- 插入使用自定义 map/reduce作业使用的语言写的自定义脚本