黄山网站建设jidela,公司注册地址异常如何处理,泰安网络公司推荐,小程序ui设计报价过去#xff0c;在学习hive的过程中学习过分桶与分区。但是#xff0c;却未曾将分区与分桶做详细比较。今天#xff0c;回顾skew join时涉及到了分桶这一概念#xff0c;一时间无法区分出分区与分桶的区别。查阅资料#xff0c;特地记录下来。
一、Hive分区
1.分区一般是…过去在学习hive的过程中学习过分桶与分区。但是却未曾将分区与分桶做详细比较。今天回顾skew join时涉及到了分桶这一概念一时间无法区分出分区与分桶的区别。查阅资料特地记录下来。
一、Hive分区
1.分区一般是手动添加分区在hdfs中不同分区的数据一般存储在不同的目录下。
2.分区的个数一般是可以增长的用户只需要在建表时指定分区字段然后具体的分区数则是由字段中数据的种类所决定的。
3.分区通过partition by语句实现
CREATE TABLE my_table (col1 INT,col2 STRING
)
PARTITIONED BY (dt STRING, country STRING);4.如果数据进行了分区在插入数据时需要使用PARTITION指定分区使用如下语句
INSERT INTO my_table PARTITION (dt2023-01-01, countryChina)
VALUES (1, data1), (2, data2);5.一般情况下分区的字段通常仅包含如下几种字段
时间根据时间戳或日期将数据按照不同的时间段进行分区例如按年、月、日等。地理位置根据地理信息将数据按照不同的地域进行分区例如国家、城市等。类别/类型根据某个类别或类型属性将数据进行分类并进行相应的分区。
二、Hive分桶
分桶通常也是由用户指定字段同时用户还要指定桶个数。数据按照对指定字段进行哈希函数后的结果进行划分和存储。通过分桶可以将数据均匀分布到不同的桶中提高查询性能。
存储方面分桶后的数据一般在同一个目录下。
一般使用CLUSTERED BY语句进行分桶使用方法如下
CREATE TABLE my_bucketed_table (col1 INT,col2 STRING
)
CLUSTERED BY (col1) INTO 4 BUCKETS
SORTED BY (col2);使用分桶一般是为了提升查询效率比如在进行join操作时可能会出现数据倾斜。如果是大表join大表就需要使用SMBjoin。可以视作是mapjoin的一种。其中最重要的就是要对表进行分桶。
在进行SMBjoin时一般执行join操作的列也必须时bucket列。这样大表join大表就被转化为了小表join小表或大表join小表。
三、分区与分桶的区别
两者目的不同数据分桶的目的在于进行查询时提升查询效率尤其是join操作时。而分区表则除了优化查询同时将数据存储在不同文件夹下方便数据管理。
两者实现方式不同数据分桶仅需要指定一个字段并仅需要指定桶个数。数据分区则可以指定多个字段并无需指定区个数。
两者应用场景不同分区更适合于但节点数据库的管理和查询优化而分桶更适合于分布式系统中数据的均匀分布和查询优化。