1、由create table命令直接创建,没有加入关键字的表
2、内部表默认存储/user/hive/warehouse下,也可以由location指定、
3、drop表时会将表数据与元数据同时删除
根据以上两种建表方式,引出,hive常用的三种建表的方法
根据需求,分别列出表中的列,创建表
场景:在库中没有相关的表,根据要处理的数据信息,创建原始表
create table if not exists db_hive_test.testTable01(
ip string comment 'remote ip address',
user string comment 'customer name',
request_url string,
city string
)
comment 'create table test ',
row format delimited fields terminated by '\t' lines terminated by '\n';
load data local inpath '/../../.' overwrite into table testTable01;
需要创建一个跟已存在数据库中相同,结构相同的表,及,复制已存在表的结构、
create table if not exists Newtable_name like db_name.Oldtable_name;
如图,复制已存在的testTable01表结构,创建表testTable02
通过查询命令查看表信息
describe formatted table_name;
可以看到,新建的表testTable02的表结构与表testTable01相同
查询数据中的信息,将查询结果信息,保存成一个表
为了保存处理数据的结果信息,需要将处理的结果保存,因此需要创建表来存储结果信息
create table if not exists Newtable_name as select col_name1,col_name2 from Oldtable_name
如图所示,查询testTable01表的信息后创建一个新的表testTable03
如图所示,testTable03表中的数据就是查询testTable01表中的信息
1、创建表是,建表命令增加 ext ernal 关键字
2、drop命令只会删除数据表的元数据,不会删除表的数据文件
外部表与内部表的建表hql语句都相同,唯一的区别就是外部表有关键字
create external table if not exists db_hive_test.testTable01(
ip string comment 'remote ip address',
user string comment 'customer name',
request_url string,
city string
)
comment 'create table test ',
row format delimited fields terminated by '\t' lines terminated by '\n';
内部表和外部表的区别
1、建表语句的差异,外部表需要增加关键字,内部表不需要
2、内部表drop表时,会将表数据,与元数据同时删除,而外部表则不会删除元数据,只会删除表数据
创建外部表
加载外部表数据
查询元数据,以及表信息
testTable02表数据
externalTable表数据
mysql数据库mata store库中的信息
drop table
drop table testTable02;
drop table externalTable04;
drop后通过ui查看,可以发现,内部表testTable02被删除了,外部表externalTable的元数据还在
drop后mysql查询
明显可以看到数据库中的表数据全部被删除
分区表:实际就是对应一个HDFS文件系统上的独立文件夹,该文件下是该分区所有的数据文件。
hive中分区就是分目录,把一个打的数据集根据业务需求分割成更小de数据集。
create table if not exists db_hive_test.dept_partition05(
loc loc_type,loc loc_type
)
partitioned by(month string)
row format delimited fields terminated by '\t';
load data local inpath ’/opt/modules/datafiles/testData.txt‘ into table db_hive_test.dept_partition partitioner (month ='201603');