|NO.Z.00008|——————————|BigDataEnd|——|Hadoop&Hive.V08|——|Hive.v08|Hive_DDL数据库操作.v02|
一、内部表 & 外部表
### --- 在创建表的时候,可指定表的类型。
~~~ 表有两种类型,分别是内部表(管理表)、外部表。
~~~ 默认情况下,创建内部表。如果要创建外部表,需要使用关键字 external
~~~ 在删除内部表时,表的定义(元数据) 和 数据 同时被删除
~~~ 在删除外部表时,仅删除表的定义,数据被保留
~~~ 在生产环境中,多使用外部表
二、内部表:t1.dat文件内容
[root@linux123 ~]# vim /home/hadoop/data/t1.data
2;zhangsan;book,TV,code;beijing:chaoyang,shagnhai:pudong
3;lishi;book,code;nanjing:jiangning,taiwan:taibei
4;wangwu;music,book;heilongjiang:haerbin
### --- 创建表 SQL
~~~ # 创建内部表
hive (mydb)> create table t1(
id int,
name string,
hobby array<string>,
addr map<string, string>
)
row format delimited
fields terminated by ";"
collection items terminated by ","
map keys terminated by ":";
~~~ # 显示表的定义,显示的信息较少
hive (mydb)> desc t1;
OK
col_name data_type comment
id int
name string
hobby array<string>
addr map<string,string>
~~~ # 显示表的定义,显示的信息多,格式友好
desc formatted t1;
~~~ # 加载数据
hive (mydb)> load data local inpath '/home/hadoop/data/t1.dat' into table t1;
~~~ # 查询数据
hive (mydb)> select * from t1;
OK
t1.id t1.name t1.hobby t1.addr
2 zhangsan ["book","TV","code"] {"beijing":"chaoyang","shagnhai":"pudong"}
3 lishi ["book","code"] {"nanjing":"jiangning","taiwan":"taibei"}
4 wangwu ["music","book"] {"heilongjiang":"haerbin"}
~~~ # 查询数据文件
hive (mydb)> dfs -ls /user/hive/warehouse/mydb.db/t1;
Found 1 items
-rwxrwxrwx 3 root supergroup 148 2021-08-23 17:22 /user/hive/warehouse/mydb.db/t1/t1.dat
~~~ # 删除表。表和数据同时被删除
hive (mydb)> drop table t1;
~~~ # 再次查询数据文件,已经被删除
三、外部表
### --- 创建外部表
hive (mydb)> create external table t2(
id int,
name string,
hobby array<string>,
addr map<string, string>
)
row format delimited
fields terminated by ";"
collection items terminated by ","
map keys terminated by ":";
~~~ # 显示表的定义
hive (mydb)> desc formatted t2;
~~~ # 加载数据
hive (mydb)> load data local inpath '/home/hadoop/data/t1.dat' into table t2;
~~~ # 查询数据
hive (mydb)> select * from t2;
OK
t2.id t2.name t2.hobby t2.addr
2 zhangsan ["book","TV","code"] {"beijing":"chaoyang","shagnhai":"pudong"}
3 lishi ["book","code"] {"nanjing":"jiangning","taiwan":"taibei"}
4 wangwu ["music","book"] {"heilongjiang":"haerbin"}
~~~ # 删除表。表删除了,目录仍然存在
hive (mydb)> drop table t2;
~~~ # 再次查询数据文件,仍然存在
四、内部表与外部表的转换
~~~ # 创建内部表,加载数据,并检查数据文件和表的定义
hive (mydb)> create table t1(
id int,
name string,
hobby array<string>,
addr map<string, string>
)
row format delimited
fields terminated by ";"
collection items terminated by ","
map keys terminated by ":";
hive (mydb)> load data local inpath '/home/hadoop/data/t1.dat' into table t1;
hive (mydb)> dfs -ls /user/hive/warehouse/mydb.db/t1;
-rwxrwxrwx 3 root supergroup 148 2021-08-23 17:30 /user/hive/warehouse/mydb.db/t1/t1.dat
hive (mydb)> desc formatted t1;
~~~ # 内部表转外部表
hive (mydb)> alter table t1 set tblproperties('EXTERNAL'='TRUE');
~~~ # 查询表信息,是否转换成功
hive (mydb)> desc formatted t1;
~~~ # 外部表转内部表。EXTERNAL 大写,false 不区分大小
hive (mydb)> alter table t1 set tblproperties('EXTERNAL'='FALSE');
~~~ # 查询表信息,是否转换成功
hive (mydb)> desc formatted t1;
五、小结
### --- 建表时:
~~~ 如果不指定external关键字,创建的是内部表;
~~~ 指定external关键字,创建的是外部表;
### --- 删表时
~~~ 删除外部表时,仅删除表的定义,表的数据不受影响
~~~ 删除内部表时,表的数据和定义同时被删除
### --- 外部表的使用场景
~~~ 想保留数据时使用。生产多用外部表
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通