1.이슈 내용
- 파이썬 클래스의 멤버 변수 초기화시 특정 컬럼이 tuple 값으로 초기화되던 문제.
- tuple 로 초기화 된 값 때문에, external 테이블이 미리 정의한 컬럼 타입과 불일치 하여 조회에 이슈가 발생했었다.
2.이슈 원인
-내 손의 잘못.
-콤마. 파이썬은 원소 뒤에 콤마가 있으면 단일 튜플로 인식한다.
- 예제 재연
import json
ods_json_data ='''
{
"log_seq" : "00001",
"event_time" : 1656771413
}
'''
class ODSLog:
def __init__(self,
log_Seq = None,
event_time = None,
field_1 = None,
field_2 = None,
**kwargs):
self.log_seq=log_Seq
self.event_time=event_time
self.field_1=field_1,
self.field_2=field_2
def get_ods_transform_log():
ods_data = json.loads(ods_json_data)
ods_log = ODSLog(ods_data)
print(ods_log.__dict__)
get_ods_transform_log()
# 출력 값 -
{'log_seq': {'log_seq': '00001', 'event_time': 1656771413}, 'event_time': None, 'field_1': None, 'field_2': (None,)}
- ods_json_data 와 같은 방식으로 데이터가 들어오면, 클래스를 이용하여 필요한 ETL 처리후에 데이터를 출력 처리
- 실시간 데이터 수집의 경우 이상값이나 정의하지 않은 컬럼이 들어올 때를 예측해서 처리 로직을 추가해주면 좋다.
3.회고
콤마가 포함된 라인 하나를 발견하지 못해, 원천 데이터를 탓하며 일부러 타입 캐스팅을 하드코딩할 생각까지 했던 스스로를 반성한다.
컬럼이 엄청 많은 로그를 처리할때 sublime text 나 엑셀을 이용해 프로그램 코드의 일부분을 일괄로 처리할 때가 있다. 그때 일부는 하나하나 찾아가면서 보정을 하게 되는데 그 과정에서 실수가 많이 발생하는 것 같다.
하반기에는 파이썬 공부도 해야 할 것 같다....
'TroubleShooting' 카테고리의 다른 글
EMR 에서 컨테이너 사용시 멀티 아키텍쳐 관련 이슈 (0) | 2023.08.09 |
---|---|
MWAA / sqlAlchemy 내 _rfc_1738_quote import 오류 (0) | 2022.10.18 |
[grafana] organization 삭제로 인한 대시보드 삭제 이슈 (0) | 2022.04.16 |
[airflow] initdb 명령어 실행 시 werkzeug.utils 관련 패키지 이슈 (0) | 2021.06.17 |