LabHub
배우기 러닝패스 코스

데이터 파이프라인 · 품질 검사와 격리 · 실습

격리를 운영한다 — 쌓고, 끊고, 다시 넣는다

LabHub 에서 이어서 보기

목표

기대치를 파일로 적어 두고, 드롭을 실행마다 줄 단위로 걸러 sqlite 의 사실 표와 격리 표로 나눠 쌓는 문지기 qgate.py 를 만든다. 너무 많이 틀린 실행은 통째로 끊고, 고친 줄을 다시 넣되 이중 계산이 안 나게 하고, 나이 든 격리를 잡아내고, 실행 상태와 자료 상태를 갈라 보고한다.

왜 중요한가

못 쓰는 줄을 버리지 않고 격리에 남기는 것까지는 대개 한다. 문제는 그다음이다. 격리는 실행마다 다시 쌓이고, 반년 뒤에 열어 보면 4만 줄이 들어 있고, 그동안 집계는 그만큼 빠진 채로 나가고 있었다. 파이프라인은 매일 성공했다 — 성공은 오류 없이 끝났다는 뜻이지 넣어야 할 것을 다 넣었다는 뜻이 아니다.
줄 하나가 틀린 것과 파일 전체가 틀린 것도 다른 사건이다. 상류가 칼럼 순서를 바꿔 보내면 거의 모든 줄이 어긋나는데, 그때 줄 단위로 격리하면 격리 표에 만 줄이 들어가고 집계는 빈 채로 나간다. 그런 파일은 한 줄도 넣지 않고 실행을 끊는 편이 낫다. 가르는 기준은 비율이고, 그 비율은 둥근 수가 아니라 평소 실패 비율에서 정한다.
그리고 고친 줄을 다시 넣는 고리가 필요하다. 재투입은 사람이 손으로 돌리는 일이라 반드시 여러 번 실행되고, 그때 사실 표에 두 번 들어가거나 이미 닫힌 격리를 또 닫아 "3건 해결" 이 두 번 보고되기 쉽다.
채점기는 여러분이 적어 낸 문구를 믿지 않는다. 임시 디렉터리에 채점기가 만든 드롭과 기대치를 차려 놓고 여러분의 문지기를 실제로 실행한 뒤, 만들어진 sqlite 파일을 직접 열어 사실과 격리와 실행 기록을 채점기가 직접 센 값과 대조한다. 임계치와 상호와 금액은 실행마다 바뀐다.

단계

1. /root/quarantine/gen_drops.py 를 만들어 실행해 /root/quarantine/drops 아래 드롭 넷과 /root/quarantine/expectations.json 을 만드세요.
2. /root/quarantine/qgate.pycheck 를 만들어 기대치로 세어만 보게 하세요.
3. run 을 더해 sqlite 에 사실과 격리와 실행 기록을 쌓게 하세요.
4. run --max-fail-ratio 를 더해 너무 많이 틀린 실행을 통째로 끊게 하세요.
5. requeue 를 더해 고친 줄을 다시 넣되 두 번 넣어도 숫자가 안 변하게 하세요.
6. aging 을 더해 나이 든 격리를 잡아내게 하세요.
7. status 를 더해 실행 상태와 자료 상태를 갈라 보고하게 하세요.
8. 자기 드롭 넷을 차례로 돌려 /root/quarantine/pipeline.db 를 만들고 /root/quarantine/status.json/root/quarantine/quarantine_report.md 를 쓰세요.

참고

단계 8개

  1. 드롭과 기대치를 파일로 두기
  2. 기대치로 세어만 보기
  3. 사실과 격리를 나눠 쌓기
  4. 너무 많이 틀린 실행은 통째로 끊기
  5. 고친 줄을 다시 넣기
  6. 나이 든 격리를 잡아내기
  7. 성공했다와 맞다를 갈라 보고하기
  8. 자기 드롭으로 한 주를 돌리고 보고하기