前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hive表操作二(管理表、外部表、分区表)

Hive表操作二(管理表、外部表、分区表)

作者头像
DataScience
发布2020-04-14 12:11:11
8670
发布2020-04-14 12:11:11
举报
文章被收录于专栏:A2DataA2Data

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;

、、、、、、

从懵懂到求知 从依赖到独立

我经历了先抉择 后努力的人生过程

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataScience 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档