Объединение двух таблиц в улье

У меня есть таблица, в которой я разделил дату по годам, месяцам и датам

'ABC' Раздел по

(год='2011', месяц='08', день='01')

Я хочу запустить запрос что-то вроде

select * from ABC where dt>='2011-03-01' and dt<='2012-02-01';

Как я могу запустить этот запрос с приведенной выше схемой разбиения по годам, месяцам и дням?


person TopCoder    schedule 17.02.2012    source источник


Ответы (2)


Вы можете подумать о создании внешней таблицы, разделенной на «гггг-мм-дд» и использующей те же местоположения, что и ваша существующая таблица. Вам не придется копировать какие-либо данные, и у вас будет гибкость обоих форматов разделения.

person Matt Tucker    schedule 18.02.2012

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';

Приведенный выше запрос должен решить эту задачу, но на самом деле он не является ни гибким, ни хорошо читаемым. Как предложил Мэтт, лучшим форматом секционирования будет одна строковая переменная в формате гггг-мм-дд в качестве столбца секционирования. Однако вам, возможно, придется сделать копию данных, если вы измените схему разбиения для года, месяца, дня на dt. Хотя, на мой взгляд, оно того полностью стоит.

person Mark Grover    schedule 25.04.2012