大数据之hive各种表(二)

本文介绍了Hive中的内部表与外部表的区别,以及分区表和桶表的使用方法。内部表在删除时会同时删除元数据和数据,而外部表仅删除元数据。分区表能够通过特定字段对数据进行组织,提高查询效率;桶表则进一步细化数据组织,通过哈希分桶减少查询所需扫描的数据量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、外部表和内部表

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进行查询时,可以快速确定数据存在于哪个桶中,而只遍历一个桶可以提供查询效率

参考资料

### 关于尚硅谷大数据Hive实战教程第11章的内容 在尚硅谷的大数据技术系列教程中,针对Hive的实战部提供了详尽的学习材料[^3]。具体到第十一章节,主要聚焦于通过实际操作来加深理解,使学员能够掌握如何利用Hive处理大规模结构化数据集。 #### 主要内容概览 - **复杂查询优化** - 学习者会了解到不同类型的查询语句及其执行计划,学会运用多种策略提升查询效率。 - **UDF函数开发** - 讲解自定义用户定义函数(UDF),允许使用者编写自己的逻辑将其嵌入至SQL查询之中,从而扩展Hive的功能边界。 - **分区管理** - 探讨高效的数据组织方式——即分区(partitioning)(bucketing),以及它们对于加速特定模式下读取速度的重要性。 - **性能调优技巧** - 提供一系列实践建议帮助调整参数设置以达到最佳运行状态;包括但不限于内存配、发控制等方面的知识点。 ```sql -- 示例:创建外部表时指定文件格式为ORC,采用LATERAL VIEW展开JSON数组字段 CREATE EXTERNAL TABLE IF NOT EXISTS my_table ( id STRING, data ARRAY<STRUCT<key:STRING,value:INT>> ) ROW FORMAT SERDE 'org.apache.hive.serde2.lazy.LazySimpleSerDe' STORED AS ORC LOCATION '/path/to/data'; SELECT t.id, tc.category_name FROM my_table LATERAL VIEW EXPLODE(data) t_data AS key, value; ``` 此章节不仅限理论讲解,更强调动手能力培养,鼓励读者跟随指导完成相应练习项目,在真实环境中验证所学概念的有效性和实用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值