sql—当我们需要基于每日数据的查询时,应该如何创建配置单元表

cgvd09ve  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(295)

我想了解我是否需要查询一个表,并且查询如下所示
从表\u name中选择*其中date\u column>sysdate-2和date\u column<sysdate;
注:我的目的是选择每天的具体数据
那么我应该如何设计我的表以获得更好的结果??我认为基于日期的分区会给出太多的分区并导致性能瓶颈,不确定bucketing在这里是否有效。。。。请给出一些建议和解释

kpbpu008

kpbpu0081#

如果每天的数据不足以创建分区,则必须考虑基于 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;

这优化了存储和性能需求。

cbeh67ev

cbeh67ev2#

你应该按日期划分。
这将创建大量分区,这是正确的。在hive中,每个日期都是一个单独的文件,是的,hive需要维护所有这些,但这正是hive最擅长的。
注:我的目的是选择每天的具体数据
因为这是您的意图,所以您将在日常分区中获得最佳性能。
其他类型的查询,跨多个日期运行,可能会导致您所关心的性能瓶颈。但如果出现这种情况,您可以考虑创建一个不同的表来处理该用例。
对于您当前的主要用例,每日分区是解决方案。

相关问题