这篇文章主要介绍Hive中管理表、外部表、分区表的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
*管理表
--我们目前所创建的表都是管理表,也叫内部表
--Hive会控制管理表数据的生命周期,Hive默认会将表数据存储在/user/hive/warehouse子目录下
--删除一个管理表时,Hive也会删除这个表中数据
--管理表不方便和其他工具共享数据
eg:我们有一份由Pig或其他工具创建并且主要由这一工具使用的数据,同时我们还想使用Hive执行查询,可以创建一个外部表指向这份数据,并不需要对其具有所有权
*外部表
--文件位于分布式文件系统的/data/test
eg:CREATE EXTERNAL TABLE IF NOT EXISTS app (
hour string,
name string,
pv string,
uv string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/data/test';
对以上语句分析:
1.关键字EXTERNAL告诉Hive这个表是外部表,LOCATION告诉Hive数据位于哪个路径下
2.因为是外部表,所以Hive并非认为其完全拥有这份数据,删除该表时并不会删除这份数据,只会删除描述表的元数据信息
*管理表VS外部表
--可以用 DESCRIBE EXTENDED tablename语句的输出中查看到表是否是管理表或外部表
--对于管理表,可看到如下信息
... tableType:MANAGED_TABLE)
--对于外部表,可看到如下信息
... tableType:EXTERNAL_TABLE)
注:如果语句省略 EXTERNAL 关键字而源表是外部表的话,那么生成的新表也是外部表
如果语句省略 EXTERNAL 关键字而源表是管理表的话,那么生成的新表也是管理表
如果语句有EXTERNAL关键字而源表是管理表的话,那么生成的新表是外部表
*分区管理表
--管理表和外部表都可以加分区
eg:CREATE TABLE IF NOT EXISTS tmp.table1(
userId string COMMENT '用户ID',
name string COMMENT '用户姓名',
createtime string COMMENT '创建时间'
)
PARTITIONED BY (country string,state string );
--分区表改变了Hive对数据存储的组织方式。如果我们在tmp库下创建这个表,那么对于这个表只会有一个table1目录与之对应:
/user/hive/warehouse/tmp/table1
但是,Hive在表目录下将会建好可以反映分区结构的子目录
eg:/table1/country=CA/state=AB
/table1/country=CA/state=BC
...
/table1/country=US/state=AL
/table1/country=US/state=AK
...
这些都是实际的目录名称,州目录下将会包含有零个文件或者多个文件,这些文件中存放着那些州的用户信息
分区字段一旦创建好,表现得就和普通字段一样,除非优化查询性能,否则不需要关心是否是分区字段
如果要查某个国家的用户,那仅仅需要扫描那个国家对应的目录就可以
--查看表中存在的所有分区
eg: hive> SHOW PARTITIONS table1;
country=CA/state=AB
country=CA/state=BC
...
country=US/state=AL
country=US/state=AK
...
查看某个特定分区
eg: hive> SHOW PARTITIONS table1 PARTITION(country='US');
country=US/state=AL
country=US/state=AK
...
*外部分区表
--创建外部分区表
eg: CREATE EXTERNAL TABLE IF NOT EXISTS app (
hour string,
name string,
pv string,
uv string)
PARTITIONED BY (timetype string,clct_day string )
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
--增加指定分区的值
eg: ALTER TABLE app ADD PARTITION (timetype=hour, clct_day='2018-07-26')
LOCATION '/data/test/table1/hour/'2018-07-26' ';
*自定义表的存储格式
--Hive的默认存储格式是文本文件格式,也可以用STORED AS TEXTFILE 指定,同时在创建表的时候指定各种分隔符
-- 使用TEXTFILE意味着每一行被认为是一个单独的记录
--也可以保存为其他Hive支持的文件格式,包括SEQUENCEFILE和RCFILE,这两种文件格式都是使用二进制编码和压缩来优化磁盘空间使用以及I/O带宽性能的
eg: CREATE TABLE IF NOT EXISTS tmp.table1(
userId string COMMENT '用户ID',
name string COMMENT '用户姓名',
createtime string COMMENT '创建时间')
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;
以上是“Hive中管理表、外部表、分区表的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。