Hive学习—表相关操作

风起,唯有努力生存,供学习HSQL的童鞋们参考!

一、基础建表

hive中有两种表形式:1.内部表 2.外部表
区别:内部表的数据完全由Hive管理,在hive中用命令删除表(元数据,表结构)也会删除表数据,而外部表的数据不完全由Hive管理,删除表不会删除表的数据(表数据是由hdfs路径中的存储数据的文件映射过来的)

内部表创建

内部表的创建方法基本等同mysql

create table userinfos(
    userid int,
    username string,
    age int,
    gender string,
    birthday date
)
//导入外部数据时字段之间的分隔方式
row format delimited fields terminated by ','; 
//存储为text格式
stored as textfile 

外部表创建(external table)

create external table customs(
	 cust_id string,
	 cust_name string,
	 age int
)
//处理csv文件中单列有逗号,默认的row format分割方式会错误分割的问题
row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
with serdeproperties 
(	
	//分割方式为逗号
   'separatorChar' = ',',
   //使""内部语句不解析
   'quoteChar' = '\"',
   //忽略符号\
   'escapeChar'= '\\'
)
//导入数据时忽略表头(第一行)
stored as textfile 
 //hdfs中的位置,如果是目录,映射目录里所有文件
location '/data';   
//该属性要放在最后面
tblproperties("skip.header.line.count"="1")                

附:OpenCSVSerde 默认的分隔符(separator)、quote 以及逃逸字符(escape characters )分别为 \、" 以及 ’

二、高阶建表

1.CTAS----as select

该方式不支持创建外部表,分区,分桶

create table student as select * from teacher;

2.CTE(hive独有,类似子查询)

CREATE TABLE employee AS
WITH 
r1 AS  (SELECT name FROM r2 WHERE name = 'Michael'),
r2 AS  (SELECT name FROM employee WHERE sex_age.sex= 'Male'),
r3 AS  (SELECT name FROM employee  WHERE sex_age.sex= 'Female')
SELECT * FROM r1 UNION ALL SELECT * FROM r3;

3.like-----创建表结构相同的新表(包括分区),但是不复制数据

create table new_table like existing_table;

三、修改表结构

主要是通过alter table 命令

1.增加列

//增加id列,类型为int
alter table student add columns(id int) 

2.删除列

alter table student drop column id;

3.修改列名和类型

////原列名id改为sid,类型改为string
alter table student change column id sid string;

4.替换列

//实质是先将age列删除,然后再添加新列name
alter table student replace columns(age int,name string);

5.修改表名

注:内部表更新表元数据和hdfs中存放表的目录名称,外部表只更新元数据,不更改存放数据的目录名称(映射文件)

alter table student rename to new_student;

四、批量插入数据

hive中不支持update,因为数据仓库的特性是要求数据是集成稳定的

1.insert into 追加插入

//table关键字可以省略
insert into (table) tb_b select * from tb_a

2.insert overwrite 覆盖原表插入

//table关键字不可省略
insert overwrite table tb_b select * from tb_a

3.load data

load data local inpath '/opt/mydata.csv' overwrite into table test partition(country=’CHINA’);

注释:
i).local表示从本地加载数据(拷贝) 无local表示从hdfs中加载数据(文件直接被移动,并且不改文件名)
ii).overwrite 表示覆盖表中数据,无overwrite则是追加,且不会滤重(如果有数据重复会自动重命名)
iii)partition为分区,后面介绍

4.location 文件映射,一般创建外部表时用

五、清空表数据(不删除表结构)

hive中不支持delete table t_name

truncate table t_name;

六、删除表/数据库

drop table tb_name
drop database db_name

你可能感兴趣的:(Hive)