我正在使用Apache Spark和Hadoop在我的Dataware房屋上构建Hive表。
我的问题是我的事实表按日期字段(一天/分区)进行分区,每天的大小约为4-50GB。
每个分区大约有100-200个文件(取决于我的配置spark.sql.shuffle.partitions
)。
当通过Spark SQL查询几天的数据时这没问题,因为周围有许多任务(文件数*分区数)
例如:select * from fact_table where partition_key = 20190101
但是,如果我们需要查询一年或更长时间的全部数据,则任务数量可能会迅速增加(~~ 365 *文件数量*年数) 如果我们在加入数据或执行一些操作之前将数据加载到数据帧并进行重新分区,也许我们可以优化此过程,但是如果使用SparkSQL查询数据(为某些BI工具提供数据),我将不知道如何控制这些任务并优化查询
那么我们如何优化任务数量和性能?