-
플랫 파일은 데이터 분석에서 매우 일반적인 형식임
- 이 완벽 가이드는 플랫 파일이 무엇인지, 어떤 종류가 있는지, 어떤 걸 선택해야 하는지 부터 유스 케이스, 포맷 특징 및 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) 기반 저장
-
사람이 읽을 수 있는 형식 여부
-
CSV와 JSON: 텍스트 기반 → 사람이 읽기 쉬움
-
Parquet와 DBMS: 바이너리 기반 → 사람이 읽기 어려움
-
이동성(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 → 작은 파일 크기, 빠른 쿼리, 복잡한 데이터 유형 지원이 필요할 때 고려