Hive

Hive

Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据。它架构在Hadoop之上。

通过HSQL访问在Hadoop上的文件或者HBase上的数据,实现extract/transform/load(ETL)和数据分析,etc。 TezSparkMapReduce执行引擎,支持UDF

metastore 保存了于Hive到HDFS映射。Hive使用HQL操作HDFS的数据

外部表

分区

建表

1
2
3
4
5
6
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] table_name

[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[ROW FORMAT row_format]
[STORED AS file_format]

[ROW FORMAT DELIMITED]关键字,是用来设置创建的表在加载数据的时候,支持的列分隔符。 列终止符,行终止符,并保存的文件类型

1
2
3
4
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED IN TEXTFILE
1
2
3
4
5
6
7
8
9
hive> create table wyp(id int,
    > name string,
    > age int,
    > tele string)
    > ROW FORMAT DELIMITED
    > FIELDS TERMINATED BY '\t'
    > STORED AS TEXTFILE;
OK
Time taken: 0.759 seconds

LOAD DATA语句

1
2
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename 
[PARTITION (partcol1=val1, partcol2=val2 ...)]

hive-site.xmlhive.metastore.warehouse.dirHive表数据存放的路径, 每创建一个表都会在hive.metastore.warehouse.dir指向的目录下以表名创建一个文件夹,所有属于这个表的数据都存放在这个文件夹里面。

1
load data local inpath '/home/wyp/data/wyp.txt' into table wyp;

drop

1
2
3
4
5
hive> drop table wyp;
Moved: 'hdfs://mycluster/user/hive/warehouse/wyp' to 
        trash at: hdfs://mycluster/user/hdfs/.Trash/Current
OK
Time taken: 2.503 seconds

如果你的Hadoop没有取用垃圾箱机制,那么drop table wyp命令将会把属于wyp表的所有数据全部删除!

外部表

创建表的时候加上external关键字,同时指定外部表存放数据的路径。(不指定外部表的存放路径,这样Hive将在HDFS上的/user/hive/warehouse/文件夹下以外部表的表名创建一个文件夹,并将属于这个表的数据存放在这里)

load data 数据是被移动到创建表时指定的目录

1
2
3
4
5
6
7
8
hive> create external table exter_table(
    > id int,
    > name string,
    > age int,
    > tel string)
    > location '/home/wyp/external';
OK
Time taken: 0.098 seconds

在删除表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的!

cat

1
2
3
4
5


desc bigdata_user; //查看表的简单结构

show create table bigdata_user; //查看bigdata_user表的各种属性;

Sqoop

Sqoop MySQL导入数据到Hive和HBase