我想了解我是否需要查询一个表,并且查询如下所示从表\u name中选择*其中date\u column>sysdate-2和date\u column<sysdate;注:我的目的是选择每天的具体数据那么我应该如何设计我的表以获得更好的结果??我认为基于日期的分区会给出太多的分区并导致性能瓶颈,不确定bucketing在这里是否有效。。。。请给出一些建议和解释
kpbpu0081#
如果每天的数据不足以创建分区,则必须考虑基于 yyyyMM (年和月)。在这种情况下,您的查询将更改为
yyyyMM
Select * from table_name where my_partition_col in (date_format(sysdate,'yyyyMM'), date_format(sysdate-2,'yyyyMM')) AND date_column > sysdate-2 and date_column < sysdate;
这优化了存储和性能需求。
cbeh67ev2#
你应该按日期划分。这将创建大量分区,这是正确的。在hive中,每个日期都是一个单独的文件,是的,hive需要维护所有这些,但这正是hive最擅长的。注:我的目的是选择每天的具体数据因为这是您的意图,所以您将在日常分区中获得最佳性能。其他类型的查询,跨多个日期运行,可能会导致您所关心的性能瓶颈。但如果出现这种情况,您可以考虑创建一个不同的表来处理该用例。对于您当前的主要用例,每日分区是解决方案。
2条答案
按热度按时间kpbpu0081#
如果每天的数据不足以创建分区,则必须考虑基于
yyyyMM
(年和月)。在这种情况下,您的查询将更改为这优化了存储和性能需求。
cbeh67ev2#
你应该按日期划分。
这将创建大量分区,这是正确的。在hive中,每个日期都是一个单独的文件,是的,hive需要维护所有这些,但这正是hive最擅长的。
注:我的目的是选择每天的具体数据
因为这是您的意图,所以您将在日常分区中获得最佳性能。
其他类型的查询,跨多个日期运行,可能会导致您所关心的性能瓶颈。但如果出现这种情况,您可以考虑创建一个不同的表来处理该用例。
对于您当前的主要用例,每日分区是解决方案。