Flat File란 무엇인가?

1 day ago 2

  • 플랫 파일은 데이터 분석에서 매우 일반적인 형식임
  • 완벽 가이드는 플랫 파일이 무엇인지, 어떤 종류가 있는지, 어떤 걸 선택해야 하는지 부터 유스 케이스, 포맷 특징 및 non-플랫파일 데이터베이스와 관계형 DBMS와의 비교등을 설명함

정의하긴 어려움

  • Flat File은 주로 데이터베이스에서 데이터를 추출하여 처리할 때 사용됨
  • CSV와 같은 단순한 텍스트 파일 형태로 각 행이 레코드를 나타내고 필드는 쉼표로 구분됨
  • 그러나 "Flat File"의 정의는 명확하지 않으며 다음과 같은 공통 특성이 있음:
    • Text-only: 이진 데이터(Blob)가 아닌 텍스트 및 숫자만 저장
    • 표(Tabular) 형식: 파일당 하나의 테이블, 행 기반 레코드 구성
    • 포터블: 특별한 소프트웨어 없이 쉽게 출력, 수정, 처리 가능
    • 비구조적: 일반적으로 레코드 간에 계층 구조나 관계 없음
    • 압축 없음: 기본적으로 스마트 압축 없음 (단, DuckDB, Spark 등에서 zip 파일 허용)
    • 인덱스 없음: 특정 레코드를 찾는 내장 인덱스 없음
    • 설명 없음: 일반적으로 메타데이터나 스키마 정보 없음
  • JSON 및 YAML은 계층 구조와 스키마를 포함할 수 있기 때문에 이 정의에서 벗어남
  • 매우 다양한 사용 사례에 사용될 수 있다는 사실도 실제로 도움이 되지 않음
    • CSV: 데이터 저장 및 교환 형식
    • JSON: 대규모 데이터 교환, 구성 관리, API 반환 형식
    • YAML: 구성 관리 및 파이프라인 정의 파일

Flat File의 유형

  • 데이터가 구성 및 저장되는 방식에 따라 다양한 유형 존재
  • 필드 및 레코드 구성 방식
    • 비구조적 Flat File: CSV와 같이 단일 테이블 구조
    • 구조적 Flat File: JSON, YAML, XML 등은 계층 구조 존재
  • 필드 구분 기호 유형
    • 행이 하나의 레코드를 나타내며 구분 기호로 필드 구분
    • 쉼표(,), 탭(\t), 파이프(|) 사용
  • 고정 너비 vs 비고정 너비 형식
    • 고정 너비 형식은 필드가 일정한 길이를 가짐 → 처리 속도 빠름
    • 비고정 너비 형식은 처리 유연성이 높음
  • 데이터 구분자
    • CSV는 탭 및 줄바꿈 저장 가능 (이스케이프 처리)
    • TSV는 탭 및 줄바꿈 불가
  • 사람의 읽기 용이성
    • Flat File은 사람이 읽을 수 있는 경우가 많음
    • 일부 플랫폼에서는 Excel 파일도 Flat File로 분류함
  • 메타데이터 포함 여부
    • CSV 같은 파일은 메타데이터 없음
    • JSON은 자체 메타데이터 및 스키마 포함 가능

Flat File의 사용 사례

  • 저장 및 교환
    • 데이터 교환: CSV, JSON은 서로 다른 플랫폼 간 데이터 교환에 유용
    • ETL에서 데이터 통합: Flat File은 ETL에서 원본 및 대상 데이터로 자주 사용됨
    • 아카이브 및 백업: Flat File은 텍스트 기반으로 장기 보관에 유리
  • 유틸리티 사용
    • 구성 관리: YAML, JSON, INI 등은 환경 변수, 데이터베이스 연결 등에 사용
    • 데이터 파이프라인 정의: JSON, YAML 등은 파이프라인 구조 정의에 사용
    • 데이터셋 메타데이터: JSON은 CSV의 변환 및 유효성 검사 정의 가능

Flat File의 예제

CSV (Comma-Separated Values)

  • 확장자: .csv
  • 구분 기호: 쉼표 ,
  • 구조: 평면 (Flat)
  • 사람이 읽기 쉬움
  • 예제: name, country, age Alice, USA, 22 Bob, Canada, 34 Charlie, UK, 28
  • 선택 기준:
    • 구조화된 테이블 형식 데이터에 적합
    • BI 시스템, Excel/Google Sheets에서 출력 시 유용
  • 회피 기준:
    • 복잡한 계층 구조 필요 시 부적합
    • 쉼표 포함 데이터 처리 시 문제 발생 가능

TSV (Tab-Separated Values)

  • 확장자: .tsv
  • 구분 기호: 탭 \t
  • 구조: 평면 (Flat)
  • 사람이 읽기 쉬움
  • 예제: name country age Alice USA 22 Bob Canada 34 Charlie UK 28
  • 선택 기준:
    • 쉼표 포함 데이터를 처리해야 할 경우 유용
    • Unix CLI 도구에서 쉽게 처리 가능
  • 회피 기준:
    • 탭 포함 데이터 처리 시 문제 발생

JSON (JavaScript Object Notation)

  • 확장자: .json
  • 구조: 계층 구조
  • 사람이 읽기 쉬움
  • 예제: [ {"name": "Alice", "country": "USA", "age": 22}, {"name": "Bob", "country": "Canada", "age": 34}, {"name": "Charlie", "country": "UK", "age": 28} ]
  • 선택 기준:
    • 계층적 데이터 구조 필요 시 적합
  • 회피 기준:
    • 속도 우선 처리 시 부적합

YAML (YAML Ain’t Markup Language)

  • 확장자: .yaml
  • 구조: 계층 구조
  • 사람이 읽기 쉬움
  • 예제: name: Alice country: USA age: 22
  • 선택 기준:
    • 사람이 읽기 쉬운 구성 파일 필요 시 적합
  • 회피 기준:
    • 대규모 데이터 저장 시 부적합

ENV Files

  • 확장자: .env
  • 구조: 평면 (Flat)
  • 사람이 읽기 쉬움
  • 예제: APP_NAME=MyApp ENVIRONMENT=production
  • 선택 기준:
    • 배포 및 로컬 환경에서 설정 파일 필요 시 적합
  • 회피 기준:
    • 복잡한 데이터 구조 저장 시 부적합

Flat File vs Non-Flat File vs DBMS 비교

Flat File은 관계형 데이터베이스(RDBMS)와 자주 비교되며, Avro, Parquet, ORC와 같은 중간 형식도 존재함. 다음은 주요 형식의 특성 비교임:

  • 레코드 구성 방식

    • CSV: 행(Row) 기반 데이터 저장
    • JSON: 키-값 쌍 기반 저장
    • Parquet: 컬럼(Column) 기반 저장
    • 관계형 DBMS: 행(Row) 기반 저장
  • 사람이 읽을 수 있는 형식 여부

    • CSVJSON: 텍스트 기반 → 사람이 읽기 쉬움
    • ParquetDBMS: 바이너리 기반 → 사람이 읽기 어려움
  • 이동성(Portability)

    • CSV, JSON, Parquet: 플랫폼 간 호환성 높음
    • DBMS: 특정 소프트웨어에서만 사용 가능
  • 계층 구조 지원

    • CSV: 계층 구조 없음
    • JSON: 계층 구조 지원
    • Parquet: 중첩된 구조 지원
    • DBMS: 여러 테이블 및 관계형 구조 지원
  • 확장성(Scalability)

    • CSV, JSON: 확장성 낮음
    • Parquet, DBMS: 확장성 높음
  • 인덱스 지원 여부

    • CSV, JSON: 인덱스 없음
    • Parquet: 파일 수준 및 컬럼 수준 메타데이터로 빠른 검색 가능
    • DBMS: 인덱스 지원
  • 스키마 지원 여부

    • CSV: 스키마 없음
    • JSON: 스키마 포함 가능
    • Parquet, DBMS: 스키마 강제 적용
  • Parquet은 B-Tree나 해시 인덱스를 사용하지 않음. 대신 파일, 행 그룹 및 컬럼 수준의 메타데이터를 통해 데이터 검색 속도를 높임

올바른 Flat File 형식 선택하기

  • CSV, TSV → 데이터를 아카이브하거나 플랫폼 간에 이동할 때등 간단한 데이터 교환 및 저장
  • JSON → 계층 구조가 있는 자체 설명 파일 형식이 필요할 때 사용
  • YAML → 구성 및 파이프라인 설정에 적합
  • Parquet → 작은 파일 크기, 빠른 쿼리, 복잡한 데이터 유형 지원이 필요할 때 고려

Read Entire Article