목록으로

Programming Notes

Terastream .ts 파일, 파이썬으로 데이터 추출하기: 형상 관리 프로젝트 분석의 첫걸음

Terastream을 사용한 형상 관리 프로젝트에서 생성되는 .ts 파일, 다들 한 번쯤은 다뤄보셨을 겁니다. 이 파일은 텍스트 형식으로 저장되어 있어 얼핏 보기에는 복잡해 보이지만, 잘 파싱하면 프로젝트의 중요한 정보들을 얻어낼 수 있습니다. 특히, 테이블과 컬럼 정보는...

Terastream을 사용한 형상 관리 프로젝트에서 생성되는 .ts 파일, 다들 한 번쯤은 다뤄보셨을 겁니다. 이 파일은 텍스트 형식으로 저장되어 있어 얼핏 보기에는 복잡해 보이지만, 잘 파싱하면 프로젝트의 중요한 정보들을 얻어낼 수 있습니다. 특히, 테이블과 컬럼 정보는 데이터 분석이나 마이그레이션 작업에서 핵심적인 역할을 하죠. 이번 글에서는 파이썬을 이용하여 .ts 파일에서 원하는 정보를 추출하고, 이를 효과적으로 활용하는 방법에 대해 이야기해보겠습니다.

데이터 구조 이해와 파싱 전략

.ts 파일은 ODS(OpenDocument Spreadsheet) 프로젝트를 저장한 형태로, 주로 소스(SOURCE)와 타겟(TARGET) 테이블 정보를 담고 있습니다. 파일 구조를 살펴보면 테이블 정의, 컬럼 정의 등이 텍스트 형태로 나열되어 있음을 알 수 있습니다. 따라서, 파이썬을 이용하여 이 텍스트 파일을 읽고, 특정 패턴을 기준으로 정보를 추출하는 것이 핵심입니다.

먼저, 각 테이블과 컬럼 정보를 구분하기 위한 규칙을 찾아야 합니다. 예를 들어, 특정 키워드(예: "TABLE", "COLUMN")로 시작하는 라인을 식별하거나, 특정 구분자(예: 탭, 공백)를 기준으로 데이터를 분리하는 방식을 사용할 수 있습니다. 파싱 과정에서 group_id 컬럼의 값에 따라 데이터를 그룹화하고, 이를 바탕으로 데이터프레임을 재구성하는 것도 유용한 방법입니다. group_id는 테이블 또는 컬럼을 논리적으로 묶어주는 역할을 하므로, 이를 기준으로 데이터를 정리하면 훨씬 효율적인 분석이 가능해집니다.

구체적으로는, 파일을 한 줄씩 읽으면서 각 라인이 어떤 정보를 담고 있는지 판별합니다. 만약 테이블 정보를 담고 있다면, 테이블 이름, 스키마 등의 정보를 추출하여 저장합니다. 마찬가지로, 컬럼 정보를 담고 있다면 컬럼 이름, 데이터 타입, 길이 등의 정보를 추출하여 해당 테이블에 연결합니다. 이렇게 추출된 정보는 파이썬의 딕셔너리나 리스트와 같은 자료구조에 저장하여 관리할 수 있습니다.

추가적으로, 파일 하단에 위치한 FFD(Field Definition File) 정보는 현재 분석 대상에서 제외할 예정입니다. 이는 프로젝트의 복잡성을 줄이고, 핵심적인 테이블 및 컬럼 정보 추출에 집중하기 위함입니다. 물론, 필요에 따라 FFD 정보까지 파싱하여 활용할 수도 있습니다.

소스 및 타겟 컬럼 정보 추출: 코드 예시

이제, 위에서 설명한 파싱 전략을 바탕으로 소스(SOURCE)와 타겟(TARGET) 테이블의 컬럼 정보를 추출하는 파이썬 코드 예시를 살펴보겠습니다.

import pandas as pd

def parse_ts_file(file_path):
  """
  .ts 파일에서 SOURCE 및 TARGET 테이블의 컬럼 정보를 추출합니다.

  Args:
    file_path (str): .ts 파일의 경로.

  Returns:
    dict: SOURCE 및 TARGET 테이블의 컬럼 정보를 담은 딕셔너리.
  """

  table_info = {}
  current_table = None

  with open(file_path, 'r', encoding='utf-8') as f:
    for line in f:
      line = line.strip()

      # 테이블 시작 라인 판별 (예시: "TABLE SOURCE" 로 시작)
      if line.startswith("TABLE SOURCE"):
        current_table = "SOURCE"
        table_info[current_table] = {"columns": []}
        # 테이블 이름, 스키마 정보 추출 로직 추가

      # 테이블 시작 라인 판별 (예시: "TABLE TARGET" 로 시작)
      elif line.startswith("TABLE TARGET"):
        current_table = "TARGET"
        table_info[current_table] = {"columns": []}
        # 테이블 이름, 스키마 정보 추출 로직 추가

      # 컬럼 정보 라인 판별 (예시: "COLUMN column_name data_type" 형태)
      elif current_table and line.startswith("COLUMN"):
        # 컬럼 정보 추출 (이름, 데이터 타입 등)
        parts = line.split()
        column_name = parts[1]
        data_type = parts[2]
        # 컬럼 정보 딕셔너리에 저장
        column_data = {"name": column_name, "type": data_type}
        table_info[current_table]["columns"].append(column_data)

  return table_info

# 사용 예시
file_path = "your_ts_file.ts"
table_data = parse_ts_file(file_path)

# 데이터프레임으로 변환 (필요에 따라)
df_source = pd.DataFrame(table_data["SOURCE"]["columns"])
df_target = pd.DataFrame(table_data["TARGET"]["columns"])

print(df_source)
print(df_target)

위 코드는 .ts 파일을 읽어 각 라인을 분석하고, 테이블 및 컬럼 정보를 추출하여 딕셔너리에 저장합니다. TABLE 키워드로 시작하는 라인을 만나면 해당 테이블의 정보를 초기화하고, COLUMN 키워드로 시작하는 라인을 만나면 컬럼 정보를 추출하여 해당 테이블에 추가합니다. 추출된 정보는 pandas 라이브러리를 사용하여 데이터프레임으로 변환할 수도 있습니다.

주의: 위 코드는 예시이며, 실제 .ts 파일의 구조에 따라 파싱 로직을 수정해야 합니다. 특히, 테이블 및 컬럼 정보를 구분하는 규칙, 데이터 구분자 등을 정확하게 파악하여 코드에 반영해야 합니다.

데이터 활용 및 결론

이렇게 추출된 데이터는 다양한 용도로 활용할 수 있습니다. 예를 들어, 데이터베이스 마이그레이션 시 테이블 스키마를 비교하거나, 데이터 품질 검증 시 데이터 타입을 확인하는 데 사용할 수 있습니다. 또한, ETL(Extract, Transform, Load) 파이프라인 구축 시 소스 및 타겟 테이블 정보를 메타데이터로 활용할 수도 있습니다.

결론적으로, 파이썬을 이용하여 Terastream .ts 파일을 파싱하는 것은 형상 관리 프로젝트를 분석하고 활용하는 데 매우 유용한 방법입니다. 복잡해 보이는 텍스트 파일에서 원하는 정보를 추출하고, 이를 바탕으로 다양한 분석 및 자동화 작업을 수행할 수 있습니다. 앞으로도 .ts 파일을 활용한 다양한 분석 기법들을 탐구하고, 데이터 기반 의사 결정을 더욱 효과적으로 수행해 나가시길 바랍니다.