外部表分区的最佳大小是多少?我计划按年/月/日对表进行分区,每天大约有2gb的数据。
eulz3vhy1#
最佳的表分区是这样的,即与您的表使用场景相匹配。分区的选择应基于:如何查询数据(如果您主要需要处理日常数据,则按日期进行分区)。如何加载数据(并行线程应该加载自己的分区,而不是重叠)2gb对于一个文件来说也不算太多,不过这也取决于您的使用场景。避免不必要的复杂和冗余分区,比如(年、月、日)-在这种情况下,日期就足够进行分区修剪了。
ee7vknir2#
配置单元分区在数据稀疏的情况下最有效。我所说的稀疏是指数据内部有可见的分区,例如按年、月或日。在您的例子中,按日期进行分区没有多大意义,因为每天将有2GB的数据,而这些数据不太大,无法处理。按周或月分区更有意义,因为它将优化查询时间,并且不会创建太多小的分区文件。
nnsrf1az3#
配置单元分区定义将存储在元存储中,因此太多的分区将占用元存储中的大量空间。分区将作为目录存储在hdfs中,因此许多分区键将生成hirachical目录,这使得它们的扫描速度变慢。查询将作为mapreduce作业执行,因此创建太小的分区是没有用的。根据具体情况,考虑如何查询您的数据。对于您的情况,我更喜欢一个定义为'yyyymmdd'的键,因此我们将获得365个分区/年,表目录中只有一个级别和2g数据/分区,这对于mapreduce作业很好。为了获得完整的答案,如果您使用hive<0.12,请键入分区键字符串,请参见此处。有用的博客在这里。
3条答案
按热度按时间eulz3vhy1#
最佳的表分区是这样的,即与您的表使用场景相匹配。分区的选择应基于:
如何查询数据(如果您主要需要处理日常数据,则按日期进行分区)。
如何加载数据(并行线程应该加载自己的分区,而不是重叠)
2gb对于一个文件来说也不算太多,不过这也取决于您的使用场景。避免不必要的复杂和冗余分区,比如(年、月、日)-在这种情况下,日期就足够进行分区修剪了。
ee7vknir2#
配置单元分区在数据稀疏的情况下最有效。我所说的稀疏是指数据内部有可见的分区,例如按年、月或日。
在您的例子中,按日期进行分区没有多大意义,因为每天将有2GB的数据,而这些数据不太大,无法处理。按周或月分区更有意义,因为它将优化查询时间,并且不会创建太多小的分区文件。
nnsrf1az3#
配置单元分区定义将存储在元存储中,因此太多的分区将占用元存储中的大量空间。
分区将作为目录存储在hdfs中,因此许多分区键将生成hirachical目录,这使得它们的扫描速度变慢。
查询将作为mapreduce作业执行,因此创建太小的分区是没有用的。
根据具体情况,考虑如何查询您的数据。对于您的情况,我更喜欢一个定义为'yyyymmdd'的键,因此我们将获得365个分区/年,表目录中只有一个级别和2g数据/分区,这对于mapreduce作业很好。
为了获得完整的答案,如果您使用hive<0.12,请键入分区键字符串,请参见此处。
有用的博客在这里。