【发布时间】:2012-02-17 05:26:45
【问题描述】:
我有一个按年月日划分日期的表格
'ABC' 按
划分(年='2011',月='08',日='01')
我想运行类似的查询
select * from ABC where dt>='2011-03-01' and dt<='2012-02-01';
如何使用上述分区方案按年、月和日运行此查询?
【问题讨论】:
标签: hadoop hive database-partitioning
我有一个按年月日划分日期的表格
'ABC' 按
划分(年='2011',月='08',日='01')
我想运行类似的查询
select * from ABC where dt>='2011-03-01' and dt<='2012-02-01';
如何使用上述分区方案按年、月和日运行此查询?
【问题讨论】:
标签: hadoop hive database-partitioning
您可以考虑创建一个按“yyyy-mm-dd”分区的外部表,并使用与现有表相同的位置。您无需复制任何数据,并且可以灵活使用两种分区格式。
【讨论】:
select * from ABC where year='2011' and month >= '03'
UNION
select * from ABC where year='2012' and month = '01'
UNION
select * from ABC where year='2012' and month='02' and day='01';
上面的查询应该可以解决这个问题,但它实际上既不灵活也不可读。就像 Matt 建议的那样,更好的分区格式是将 yyyy-MM-dd 格式的单个字符串变量作为分区列。但是,如果将年、月、日的分区方案更改为 dt,则可能必须制作数据副本。不过在我看来,这是完全值得的。
【讨论】: