把hive-0.12.0.tar.gz解压到/data/目录下
[root@master conf]# tar -zxvf hive-0.12.0.tar.gz -C /data
配置Hive环境变量,可参考java环境变量配置。
[root@master conf]# source /etc/profile
上传mysql数据库驱动mysql-connector-java-5.1.28.jar到/data/hive-0.12.0/lib
如果hive-site.xml 文件不存在,则新建一个文件,内容如下所示。
hive> create database user;
hive> drop database user;
hive> create table student(id int,name string,age int,address string);
hive> load data [local] inpath '/home/testData/studentData.txt' [overwrite] into table student;
说明:local加载本地数据文件
overwrite 是否覆盖表中的数据
ALTER TABLE name RENAME TO new_name
ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...])
ALTER TABLE name DROP [COLUMN] column_name
ALTER TABLE name CHANGE column_name new_name new_type
ALTER TABLE name REPLACE COLUMNS (col_spec[, col_spec ...])
hive> DROP TABLE IF EXISTS student;
hive> create table partition_people(id int,name string,age int,address string)
partitioned by (dq string)
row format delimited fields terminated by ','
stored as sequencefile;
说明:
partitioned by (dq string) 按照dq进行分区
row format delimited fields terminated by ','; 按照”,”进行分割
stored as sequencefile; #用哪种方式存储数据,sequencefile是hadoop自带的文件压缩格式
hive> alter table partition_people add partition(dq='shanghai');
加载数据
hive> load data local inpath '/home/testData/people.txt' overwrite into table partition_people partition(dq='shanghai');
重命名分区
hive> ALTER TABLE employee PARTITION (year=’1203’)
> RENAME TO PARTITION (Yoj=’1203’);
删除分区
hive> ALTER TABLE employee DROP [IF EXISTS]
> PARTITION (year=’1203’);
桶表是对数据进行哈希取值,然后放到不同文件中存储。
指向已经在 HDFS 中存在的数据,可以创建 Partition
它和内部表 在元数据的组织上是相同的,而实际数据的存储则有较大的差异
内部表的创建过程和数据加载过程(这两个过程可以在同一个语句中完成),在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除
外部表 只有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。当删除一个 外部表 时,仅删除该链接