提示
Hive SQL 教程 欢迎使用。提供建议、纠错、催更等加作者微信: gairuo123(备注:sql )和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
本文将介绍关于 Hive 系统对数据是如何存储的。首先描述数据类型、表和分区的概念,这与你了解的传统关系型数据存储系统(DBMS)非常相似。这些对我们编写 SQL
是非常有帮助的,不过不理解也没有关系。
按数据的照粒度顺序,数据存储单元数据被组织为:
与传统的关系型数据库一样,数据库是一个名称空间,作用是避免表、视图、分区、列等的命名冲突。数据库还可用于为用户或用户组实施安全性。
具有相同模式的同质数据单元。下边是一个 page_views
表的示例,其中每一行可以由以下列(模式,schema)组成:
每个表可以有一个或多个分区键,用于确定数据的存储方式。分区除了作为存储单元外,还允许用户有效地识别满足指定条件的行;例如,STRING 类型的 date_partition 分区和 STRING 类型的 country_partition 分区。
分区键的每个唯一值定义了表的一个分区。例如,“2009-12-23” 中的所有 “US” 数据都是 page_views 表的一个分区。因此,如果仅对 2009-12-23 的 “US” 数据运行分析,则只能对表的相关分区运行该查询,从而显著加快分析速度。
但是,请注意,仅仅因为一个分区被命名为 2009-12-23 并不意味着它包含所有或仅包含该日期的数据;分区以日期命名是为了方便;保证分区名称和数据内容之间的关系是用户的工作。
分区列(Partition columns)是虚拟列,它们不是数据本身的一部分,而是在加载时派生的。
每个分区中的数据又可以基于表的某一列的散列函数的值被划分为桶。例如, page_views 表可能由 userid 绑定,userid 是 page_views 表的除 partitions 列以外的列之一。
这些可用于有效地对数据进行采样。
请注意,不需要对表进行分区或装箱,但是这些抽象允许系统在查询处理期间修剪大量数据,从而加快查询执行速度。
更新时间:2021-02-27 13:24:20 标签:hive hql 数据存储