Data pipeline/Airflow
[Airflow] 스케줄 시간 (Crontab) Query 파싱
데이터엔지니어 주형권
2023. 5. 3. 17:31
반응형
안녕하세요.
해당 글을 MySQL 문법을 사용 하였습니다.
지난번에 Query를 통해서 Airflow의 스케줄 시간을 파싱 하는 글을 작성하였는데요. ( 바로가기 )
이번에는 파싱하여 일반 사용자가 보기 편하게 나타내는 Query를 만들었습니다.
위와 같이 Crontab시간을 사용자가 보기 편한 형태로 보여 주도록 하였습니다.
아무래도 규치적을 주고 파싱을 하다 보니 영어 표현과 어순이 조금 어색하거나 안 맞는 경우가 있습니다.
이 부분은 감안해 주세요. (도저히.. 어떻게 바꿀지 모르겠습니다.)
SELECT schedule_interval
,CASE WHEN schedule_interval = '"@once"' THEN 'Schedule once and only once'
WHEN schedule_interval = '"@daily"' THEN 'Run once a day at midnight'
WHEN schedule_interval = '"None"' THEN 'Don’t schedule, use for exclusively “externally triggered” DAGs'
WHEN schedule_interval = '"@hourly"' THEN 'Run once an hour at the beginning of the hour'
WHEN schedule_interval = '"@weekly"' THEN 'Run once a week at midnight on Sunday morning'
WHEN schedule_interval = '"@monthly"' THEN 'Run once a month at midnight of the first day of the month'
WHEN schedule_interval = '"@yearly"' THEN 'Run once a year at midnight of January 1'
ELSE
CONCAT('Run at '
,CASE WHEN `hour` = '*' THEN ' Every hour ' WHEN `hour` LIKE '%/%' THEN CONCAT(' every ',REPLACE(`hour`,'*/',''),' hour ') ELSE CONCAT(`hour`,' hour ')END
,CASE WHEN `minute` = '*' THEN ' every minute ' WHEN `minute` LIKE '%/%' THEN CONCAT(' every ',REPLACE(`minute`,'*/',''),' minute ') ELSE CONCAT(`minute`,' minute ')END
,CASE WHEN `day_of_week` = '*' THEN ' every day ' ELSE CONCAT(' from ',`day_of_week`)END
,CASE WHEN `month` = '*' THEN '' ELSE CONCAT(`month`,', month ')END
,CASE WHEN `day` = '*' THEN '' ELSE CONCAT(`day`,' th ')END
)
END AS schedule_interval_parse
FROM
(
SELECT SUBSTRING_INDEX(REPLACE (schedule_interval,'"',''),' ',1)AS `minute`
,SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE (schedule_interval,'"',''),' ',2),' ',-1)AS `hour`
,SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE (schedule_interval,'"',''),' ',3),' ',-1)AS `day`
,SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE (schedule_interval,'"',''),' ',4),' ',-1)AS `month`
,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE (schedule_interval,'"',''),' ',5),' ',-1),0,'Sunday'),1,'Monday'),2,'Tuesday'),3,'Wednesday'),4,'Thursday'),5,'Friday'),6,'Saturday')
AS `day_of_week`
,schedule_interval
FROM (
SELECT '"48 * * * *"' AS schedule_interval UNION ALL
SELECT '"30 */4 * * *"' UNION ALL
SELECT '"@once"' UNION ALL
SELECT '"15 1 * * *"' UNION ALL
SELECT '"30 1 * * 1"' UNION ALL
SELECT '"30 5 * 3 1"'
)AS T1
)AS T2
위의 Query를 이용해서 누구나 쉽게 볼 수 있는 Airflow의 시간표를 만들 수 있습니다.
감사합니다.
반응형