2

外部表分区的最佳大小是多少?我计划按年/月/日对表进行分区,我们每天会获得大约 2GB 的数据。

4

3 回答 3

2

最佳表分区与您的表使用场景相匹配。应根据以下条件选择分区:

  1. 如何查询数据(如果您主要需要处理日常数据,则按日期分区)。
  2. 如何加载数据(并行线程应该加载自己的分区,而不是重叠)

即使对于一个文件,2Gb 也不算多,尽管它再次取决于您的使用场景。避免不必要的复杂和冗余分区,例如(年、月、日)——在这种情况下,日期足以进行分区修剪。

于 2016-06-01T19:08:39.007 回答
2

Hive 分区定义将存储在 Metastore 中,因此过多的分区将占用 Metastore 中的大量空间。

分区将作为目录存储在 HDFS 中,因此许多分区键会产生分层目录,这会使它们的扫描速度变慢。

您的查询将作为 MapReduce 作业执行,因此创建太小的分区是没有用的。

视情况而定,请考虑如何查询您的数据。对于您的情况,我更喜欢一个定义为 'yyyymmdd' 的键,因此我们将获得 365 个分区/年,表目录中只有一个级别和 2G 数据/分区,这对于 MapReduce 工作来说非常好。

为了回答的完整性,如果您使用 Hive < 0.12,请输入您的分区键字符串,请参见此处

有用的博客在这里

于 2016-06-01T20:31:41.467 回答
0

在数据稀疏的情况下,Hive 分区最有效。稀疏是指数据内部具有可见的分区,例如按年、月或日。

在您的情况下,按日期分区没有多大意义,因为每天都会有 2 Gb 的数据,这些数据不会太大而无法处理。按周或按月分区更有意义,因为它将优化查询时间并且不会创建太多的小分区文件。

于 2019-07-24T10:28:51.370 回答