|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

 

 

posted on   yanqi_vip  阅读(50)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示