一.内部表操作
------------------------------1内部----------------------------
--建库
create database hive2;
--用库
use hive2;
--删表
drop table t1;
--建表
create table if not exists t1(id int,name string,gender string
);
--复制内部表
--复制表结构:CREATE TABLE 表名 like 另一个表名
create table t1_like like t1;
desc t1_like;
--复制表结构:CREATE TABLE 表名 as select 语句
create table t1_like1 as select * from t1;
desc t1_like1;
--清空表内部数据 truncate table 内部表名
truncate table t1_like1;
二.外部表操作
-----------------------------------2外部表-------------------------------
--创建外部表1:
create external table out_1(id int,name string
);
--插入数据
insert into out_1 values (1,'白');
--*外部表不能使用as select的方式来复制表
--删除表,等于删了个文件夹,文件还在
drop table out_1;
truncate table out_1 ; -- 外部表不能使用truncate来清空
三.内部表和外部表的区别
主要体现在load与drop(是否同时删除元数据与数据)的操作上:
0. 建表语句的区别:
外部表的建表语句需要被 external 修饰,但是内部表是不需要的。
create external table if not exists table_name(字段名 字段类型);
1.创建表:
Hive创建内部表时,会将数据移动到数据仓库指向的路径,hive管理数据的生命周期;
Hive创建外部表时,仅记录数据所在的路径,不对数据的位置做任何改变。
2.删除表:
Hive删除内部表时,内部表的元数据和数据会一起被删除,同时对于一些hive操作不适应于外部表,比如单个查询语句创建表并向表中插入数据。
truncate命令可以清空内部表
Hive删除外部表时,不删除数据。
这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。创建外部表时,甚至不需要知道外部数据是否存在,可以把创建数据推迟到创建表之后才进行。
truncate命令不能清空外部表
3.load加载数据
内部表:会把数据移动到自己指定的路径下
外部表:不会把数据移动到自己的数据仓库目录下,也因此证明外部表的数据不是由自己管理的。
4.修改表名
-- 修改表名: alter table 旧表名 rename to 新表名 --外部表只会修改元数据表名,hdfs中表目录名不会改变
ACID,是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。