我想了解我是否需要查询表,查询如下所示
从table_name中选择*,其中date_column> sysdate-2和date_column< SYSDATE;
注意:我的目的是选择每天的具体数据
然后我应该如何设计我的表以获得更好的结果?我认为基于日期的分区将给出太多的分区并导致性能瓶颈,不确定是否在这里有效的推广.... plz建议和一些解释
答案 0 :(得分:0)
您应该按日期进行分区。
你是对的,这会创建很多分区。在Hive中,每个日期都是一个单独的文件,是的,Hive需要保持所有这些,但这正是Hive最擅长的。
注意:我的目的是选择每天的具体数据
由于这是您的意图,您将获得每日分区的最佳性能。
跨越多个日期运行的其他类型的查询可能会导致您表达担忧的性能瓶颈。但如果发生这种情况,您可以考虑创建一个不同的表来解决该用例。
对于您的主要当前用例,每日分区是解决方案。
答案 1 :(得分:0)
如果每天的数据不足以创建分区,则必须考虑基于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;
这可以优化存储和性能要求。