转载请注明出处:http://blog.csdn.net/u012842205/article/details/72765667
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。但缺点也非常明显。因为Hive运算引擎来自MapReduce,MapReduce中间结果都存储在磁盘,IO导致速度很慢,这也是Hive最显著的缺点。
作为对元数据SQL化操作的引擎,Hive同样使用RDBMS的数据表对象管理数据。
一、Hive表
Hive中能存在两种表:
- 内部表(managed table),数据文件、统计文件、元数据都由Hive自己管理,换句话说,这个表数据存储在哪里我们不用关心,也不用提供,Hive默认存储在HDFS。Hive能管理原始数据的整个生命周期。Hive表删除后,数据也随之删除。
- 外部表(external table),数据文件存储在其他系统中,可能是HDFS,也可能是HBase、ASV等,HIve只保留映射关系,但Hive表删除后,数据不会丢失,仍然存在于其他系统中。
二、创建表
由于Hive支持标准的SQL(包括SQL:2003和SQL:2011标准的一些特性),创建表与后面提到的CURD都比较好理解。以下是一些简单的创建表语句例子:
简单的内部表
create table tb (id int, name String, age int);
分区的内部表
create table ez_part_test (
id int,
col1 string,
col2 string) partitioned by
(type int) stored as orc
外部表(HDFS)
create external table example_csv_tb (
id int,
col1 string,
col2 string) ROW FORMAT
delimited fields terminated by ','
lines terminated by '\n'
stored as textfile location "/ez/example"
HiveSQL不仅仅定义字段及相应的类型,也提供定义字段属性、表存储格式等的语义。
1、外部表
例如,在HDFS上有个在 hdfs://myhost:8020/ez/example