分桶字段选择
进行分桶之前需要对表的数据分布情况进行大致的分析,一般遵循的原则为,选择离散度高的字段进行分桶。可以通过收集的数据特征,如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;