我有许多蜂巢仓库。数据位于 Amazon S3 的 parquet 文件中。一些表包含 TB 的数据。目前在 Hive 中,大多数表都按月和年的组合进行分区,两者都主要保存为字符串。其他字段是 bigint、int、float、double、string 和 unix 时间戳。我们的目标是将它们迁移到 apache 冰山表。挑战在于如何选择分区键。
我已经通过以下方式计算了每个表中每个字段的基数:
Select COUNT(DISTINCT my_column) As my_column_count
From my_table;
我还计算了每个字段的空值百分比:
SELECT 100.0 * count(*)/number_of_all_records
FROM my_db.my_table
Where my_column IS NULL;
简而言之,我已经知道每个领域的三件事:
- 数据类型
- 基数
- 空值的百分比
通过了解这三个信息,我的问题是如何选择最佳列或列组合作为未来冰山表的分区键?有什么经验法则吗?
选择分区键时,多少个分区被认为是优化的?选择分区键时哪种数据类型最好?还有哪些需要考虑的因素?在冰山表中分桶是否与在 hive 中相同,以及如何通过分区键来利用它?哪些数据类型最适合分区键?有很多小分区好还是有几个大分区好?需要考虑的分区键中的任何其他方面?