大数据之hive各种表(二)

一、外部表和内部表

1. 内部表(managed table)

  • 默认创建的是内部表 create table xxx(xx xxx)
  • 存储位置在 hive.metastore.warehouse.dir设置,默认位置 /user/hive/warehouse
  • 导入数据的时候是将文件剪切(移动)到指定位置,即原有路径下文件不再存在
  • 删除表时,数据和元数据都将被删除

2. 外部表(external table)

  • 创建:create external table xxx(xxx)
  • 外部表文件可以在外部系统上,只要有访问权限就可
  • 外部表导入文件时不移动文件,仅仅是添加一个metadata
  • 删除表时,原数据不会被删除
  • 分辨外部表和内部表DESCRIBE FORMATTED table_name
  • 外部表指向的数据发生变化的时候,会自动更新,不用特殊处理

二、分区表和桶表

1. 分区(partioned)

  • 创建分区:partioned by (xxx)
  • 有些时候数据是有组织的,比方按日期/类型等分类,而查询数据的时候也经常只关心部分数据,比方说我只想查2017年8月8号,此时可以创建分区,查询具体某一天的数据时,不需要扫描全部目录,所以会明显优化性能
  • 一个Hive表在HDFS上是有一个对应的目录来存储数据,普通表的数据直接存储在这个目录下,而分区表数据存储时,是再划分子目录来存储的

2. 分桶(clustered)

  • 分桶是相对分区进行更细粒度的划分。分桶将整个数据内容按照某列属性值得hash值进行区分,按照取模结果对数据分桶。如取模结果相同的数据记录存放到一个文件。
  • 桶表也是一种用于优化查询而设计的表类型。
  • 创建桶表时,指定桶的个数、分桶的依据字段,hive就可以自动将数据分桶存储。查询只需要遍历一个桶里的数据或者部分桶,从而提高查询效率。
  • clustered by (user_id) sorted by(leads_id) into 10 buckets
    • clustered by:指根据user_id的值进行哈希后模除分桶的个数,根据得到的结果,确定这行数据分入哪个桶,确保相同user_id的数据放入同一个桶中
    • sorted by: 是指定桶中的数据以哪个字段进行排序,排序的好处是,在join操作时能获得很高的效率
    • into 10 buckets:指分10个桶
    • 在HDFS上存储时,一个桶存入一个文件中,这样根据user_id进行查询时,可以快速确定数据存在于哪个桶中,而只遍历一个桶可以提供查询效率

参考资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值