hive表分桶设计

分桶字段选择

进行分桶之前需要对表的数据分布情况进行大致的分析,一般遵循的原则为,选择离散度高的字段进行分桶。可以通过收集的数据特征,如Distinct Value来做参考,值越大的可以优先作为考虑对象。分桶字段选择时,注意尽量使记录分布均匀,以避免数据倾斜。

建议分桶字段:关系型数据库中的主键、邮件ID、客户ID、UUID等。

分桶个数选择

一般可以通过数据量维度计算分桶个数。

根据数据量计算分桶数:

分桶数=文本格式大小(M)/500M

另外,在考虑分桶个数的时候,同时要考虑是否已经分过区。对于已经分过区的表,要按照单区的大小进行桶数的估计,而不是依照原始表。

比如存在数据的表的分区每个分区约60000万条记录,TXT格式8000MB,orc表大概有5倍压缩比,计算方式大概思路:

分桶数=MAX(60000万/1000万, 8000M/500M) = 60

为了使数据分布更加均匀,我们一般建议选择质数作为分桶数。所以该表的最佳分桶数为59或61。


常用的分桶字段多为原数据库的主健,或者如身份证号码,手机号等字段。如果不能 确定分桶字段,可以在分桶操作之前,建议用下面的语句查看每列的字段值数量分布情 况。尽量选择分布最离散的一列为分桶字段。

/*其中 column_name是holodesk_table_name的一列任意字段*/
SELECT column_name, COUNT( * ) FROM holodesk_table_name GROUP BY column_name ORDER BY COUNT; 

你可能感兴趣的:(hive表分桶设计)