aurora DB 와 s3 의 정합성을 체크 하는 애플리케이션이 필요하다.
===============================================================
aws doc에 뭔가 있다…
https://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Validating.html
정확히 마이그레이션 됐는지 데이터 검증함
데이터 전체 로드한 후 검증 시작
증분 변경 사항이 일어날 때 비교 (그럼 계속하겠다는건데? )
원본, 타겟 행간 비교 후 불일치 보고
Data validation works with the following databases wherever AWS DMS supports them as source and target endpoints:
- Oracle
- PostgreSQL-compatible database (PostgreSQL, Aurora PostgreSQL, or Aurora Serverless for PostgreSQL)
- MySQL-compatible database (MySQL, MariaDB, Aurora MySQL, or Aurora Serverless for MySQL)
- Microsoft SQL Server
- IBM Db2 LUW
소스, 타겟 엔드포인트가 나열된 디비 타입만 제공한다. 우리는 타겟이 s3 이므로 이걸 사용할 수는 없다. ㅠㅜ
===============================================================
pyspark 로 스케줄링 걸어서 특정 스케줄 마다 정합성을 체킹하는 프로세스를 만들면 될 거 같다.
pyspark 에어플로 스케줄링과 slack 얼럿은 s3 restore 할 때 했던 것들을 참고 하면 될듯 하다.
로직 : 어떻게 체크할까 ?
- 특정 pk 에 해당하는 튜플을 s3 와 원본 db 에서 가져와서 비교
풀체킹? 아니면 몇 개만? 성능을 고려 해봐야 할듯하다.. - 카운팅 : 데이터 건수 체크
데이터 건수는 데이터가 소스 디비에 곗속 들어오기 때문에 지난 일자로 끊어서 비교해야 함
2.1 일별로 짤라서 특정시간(airflow 배치 01시쯤 전 날꺼?) 에 수행
2.2 어플리케이션에 RDB dao 만들어서 이 메타 디비에 특정일자의 tuple 갯수 insert
2.3 어플리케이션에 spark 로 특정일자의 df 가져와서 tuple 갯수 메타디비에 insert
2.4 비교해서 차이가 심하면 얼럿
2.5 모니터링 시각화 (grafana?)
이 처럼 체킹하는 프로세스가 메타 디비에 각각의 카운트 수를 저장하여 시계열로 모니터링도할 수 있음 (https://burning-dba.tistory.com/130)
- 중복 체크 :
3.1 유니크 칼럼 groupby, count 해서 한개 초과 뜨면 중복 으로 판단
3.2 중복 칼럼이 뜨면 slack 얼럿
ex)
SELECT id,COUNT(*) AS cnt
FROM TABLE
GROUP BY id
HAVING count(*) > 1
- 구성도
세부 기능 정의
- count
- 특정일정 mod date 기준 mod date 없는 경우 스킵
- 과거 데이터
- 두달 전 ~ 한달 전
- 정합성이 100% 맞았을 경우
- 해당 기간 정합성이 맞았다는 것을 디비에 기록
- 스키마 -> 시작 mod date, 종료 mod date, 정합성 체킹 일시
- 두달 전 ~ 한달 전
- 최근 데이터
- 당일 00시 ~ now()-3m 데이터 비교
- 일별 count data db에 insert
- 해당 db grafana 시각화
- 오차치 임계점 넘으면 slack alert (일단 0.1% 라고 설정하겠음)
- 일별 count data db에 insert
- 당일 00시 ~ now()-3m 데이터 비교
- 과거 데이터
- 특정일정 mod date 기준 mod date 없는 경우 스킵
- key tuple 데이터 정합성
- 샘플링 방법
- 일단 1퍼센트 갯수만큼
- 10000 tuple 이면 각각 100개 가져와서 pk 별로 루프돌면서 정합성 확인
- 동일한 mod_date 날짜범위 에서 아래 수행
- 테이블에서 100개 pk 리스트 가져옴
- 해당 pk 로 parquet 에서 조회
- 있으면 멤버 데이터 값 비교 없으면 스킵
- 10000 tuple 이면 각각 100개 가져와서 pk 별로 루프돌면서 정합성 확인
- 일단 1퍼센트 갯수만큼
- 샘플링 방법
아래 글을 참고 했음.
'일 > aws' 카테고리의 다른 글
Amazon EMR 구축 #2 :: 프로비저닝 (0) | 2022.02.01 |
---|---|
Amazon EMR 구축 #1 :: 개념 정리 (0) | 2022.02.01 |
AWS Code Deploy + Jenkins + GitLab (0) | 2022.01.04 |
AWS DMS :: from aurora mySQL to S3 (0) | 2021.12.06 |
[Python] AWS S3 Lifecycle 스토리지 클래스 변경 배치 (0) | 2021.08.28 |