2017-02-14 1 views
2

Я хотел бы создать таблицу со всеми годами года, используя HQL. я уже попробовал этот подход:Как создать таблицу со всеми днями года с использованием переменной start_date?

generate days from date range

но HQL немного отличается от SQL Каков наилучший подход?
Использование PL/HQL или использование сценария bash и импорт?

Ожидаемый результат:

start_date = 2017-02-14; 

| date  | 
|2017-02-14| 
|2017-02-13| 
|2017-02-12| 
|2017-02-11| 
|2017-02-10| 
|2017-02-09| 
|2017-02-08| 
|2017-02-07| 
.... 

Благодаря

+0

Все дни года или только в дни между первым днем ​​года и датой_начала (она не должна быть end_date?)? –

+0

в любом случае .... проще использовать start_date, потому что end_date будет: 'end_date = DATE_SUB ('$ {start_date}', 365)' .... –

+0

@DuduMarkovitz вы можете мне помочь? –

ответ

2
set start_date=2017-02-14; 

select date_sub('${hiveconf:start_date}',i) 
from (select 1 as n) dummy lateral view posexplode(split(space(364),' ')) p as i,x 
; 

2017-02-14 
2017-02-13 
2017-02-12 
2017-02-11 
2017-02-10 
. 
. 
. 
2016-02-20 
2016-02-19 
2016-02-18 
2016-02-17 
2016-02-16 
+0

Какое лучшее представление год назад от start_date? Я имею в виду, как бы вы это сделали в этом случае? –

+1

Как насчет 2016-02-15 (на 2017-02-14)? но это для другого поста ... :-) –

+0

Спасибо! BTW он работает отлично !! –

1

bash Использование и дата старше начало для тестирования целей:

start_date="2014-02-14" 
days=$((($(date -u +%s) - $(date -ud $start_date +%s))/60/60/24)) 
((day_end = 366 + days)) 

while ((days < day_end ));do 
    date "+%Y-%m-%d" -d "$days days ago" 
    ((days++)) 
done 

Результат

2014-02-14 
2014-02-13 
2014-02-12 
2014-02-11 
2014-02-10 
2014-02-09 
2014-02-08 
2014-02-07 
2014-02-06 
2014-02-05 
2014-02-04 
... 
... 
... 
2013-02-21 
2013-02-20 
2013-02-19 
2013-02-18 
2013-02-17 
2013-02-16 
2013-02-15 
2013-02-14 
+0

Я получаю 'date: незаконный формат времени использование: date [-jnRu] [-d dst] [-r seconds] [-t west] [- v [+ | -] val [ymwdHMS]] ... [-f fmt date | [[[mm] dd] HH] MM [[cc] yy] [.ss]] [+ format] ' как работает эта функция даты? –

+0

Должна быть устаревшая версия, моя: 'date (GNU coreutils) 8.4' – klashxx

+1

да! это, вероятно, какая-то проблема в MAC OS date UNIX, как я мог видеть здесь https://discussions.apple.com/thread/1352105?tstart=0 и других. Еще раз спасибо! –

Смежные вопросы