[Grafana] Athena 패널 테이블 명 동적 변수 지정하기
목적
웹로그 분석 목적으로 Athena를 이용중에 있다. 쿼리 Cost를 줄이기 위해 대표적인 방법으로 필요한 기간으로 파티셔닝 전략을취할 것을 권한다.
[+] https://aws.amazon.com/ko/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/
그렇기에 분석하고자 하는 dataset을 일별로 파티셔닝을 진행하였으며 table_yymmdd 포맷으로 구분지어 생성하였다.
매번 쿼리하는데 있어 일일이 time range를 입력하여 결과값을 얻기에는 불필요한 시간이 많이 소요되어지고 있었으며 그라파나에서 Time사용자가 그라파나에서 TimeRange를 지정을 하게 되면, 아테나 패널 쿼리문에서 지정된 Table 명을 참조하는, Dynamic(동적)하게 테이블을 지정하는 것을 목적으로 둔다.
해결방안
Athena Dashboard에서 쿼리문 결과를 변수로 지정할 수 있다. Grafana에서 제공하는 $__timeFrom 값을 변수로 지정하여 테이블이름으로 적용될 수 있도록 할 수 있다.
Step 1. Dashboard > Variables
1-1. 변수 유형 및 테이블 명 지정
1-2. Query Options 지정
나의 경우 table format을 test_table_240212 식으로 일별로 파티셔닝을 하여 테이블을 생성해 놓았기에 아래와 같이 설정을 두었다.
SELECT date_format($__timeFrom(), '%y%m%d') AS formatted_time
1-3. Refresh 옵션 On time range change로 설정 (time range를 바꾸면 테이블 변수가 time range에 맞추어 적용될 수 있도록 함)
적용확인
윗 그림과 같이 날짜를 선택함에 따라 table_date 값이 동적으로 변하여 Athena 패널에 반영이되어지게 된다.
Step 2. Athena Panel 수정
FROM "Test_table_${table_date}"
WHERE time BETWEEN date_format($__timeFrom(), '%Y-%m-%dT%H:%i:%s.000') AND date_format($__timeTo(), '%Y-%m-%dT%H:%i:%s.000')
필자는 변수 명을 table_date로 정하였기에 ${table_date} 로 두었다. timeFrom()값을 참조하여 %y%m%d 형식으로 테이블 명이 적용이 되어지게 된다.
이를 바탕으로 Athena 쿼리 결과문을 Grafana TimeRange에 따라 동적으로 결과를 얻을 수 있다.