Параметры обработки, переданные в активность SQL в конвейере данных AWS
Я работаю с конвейером данных AWS. В этом контексте я передаю несколько параметров из определения конвейера в файл sql следующим образом:
s3://reporting/preprocess.sql,-d,RUN_DATE=#{@scheduledStartTime.format('YYYYMMdd')}"
Мой файл sql выглядит следующим образом:
CREATE EXTERNAL TABLE RESULT (
STUDENT_ID STRING,
REMARKS STRING,
EXAM_DATE STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE LOCATION 's3://result/data/run_date=${previous day of RUN_DATE}'; <----(1)
...
insert into temp
select a.roll_number, remarks
from student a inner join result b
on a.student_id = b.student_id
where exam_date>='<start date of previous month of RUN_DATE>' <---- (2)
and exam_date<='<end date of previous month of RUN_DATE>';<---- (3)
Здесь, в приведенном выше SQL, я не понимаю, как я буду достигать (1), (2) и (3) из RUN_DATE.
Таким образом, если RUN_DATE=20190101, то значение в (1) должно быть "20181231", значение в (2) должно быть "2018-12-01" и (3) должно быть "2018-12-31" .
1 ответ
Вы можете использовать функции даты HIVE в вашем SQL, чтобы получить желаемый результат:
- Прошлый день:
date_sub(RUN_DATE,1)
- Дата начала предыдущего месяца:
date_add(last_day(add_months(RUN_DATE, -2)),1)
- Дата окончания предыдущего месяца:
last_day(add_months(RUN_DATE, -1))