Databricks로 데이터 파이프라인을 만들고 있는데, 좋은 기능이 있어서 글을 씁니다. Databricks에서 주로 파일을 읽을 때 워크스페이스(노트북) 환경에서 데이터프레임을 만들어서 이것을 APPEND 또는 OVERWRITE 하는 방식으로 작업하시는 분들이 많은데요. 이럴 경우 데이터프레임이 용량의 제한이 있어서 OOM이 생길 수 있습니다.
그래서 혹시 바로 읽을 수 있는 방법이 없을까 하였는데, 찾아보면 대부분이 External tables를 추천 합니다. 그런데 External Table을 만들려면 스키마 형태를 알아야 하기 때문에 굉장히 곤욕입니다. 스키마가 너무 많거나 하나씩 열거하기 어려우면 이 방법 또한 굉장히 번거롭습니다.
그래서 찾아보다가 S3에 있는 파일을 그대로 읽어서 보여주는 문법을 찾았습니다. 문법은 SQL이며, Databricks 환경에서 잘 작동합니다.
SELECT *
FROM parquet.`S3파일 위치`
구문이 굉장히 심플 합니다. 제가 지금 가지고 있는 파일은 parquet라서 parquet로 설정하였고, 찾아보니 CSV도 가능한 것으로 보입니다. 이 구문으로 읽어서 다음과 같이 테이블을 생성할 수도 있습니다.
CREATE TABLE a
SELECT *
FROM parquet.`S3파일 위치`
추가적으로 여러 파일을 한번에 읽기도 가능하여, * 도 가능 합니다. 예를 들면 2025/04/25/ 아래의 모든 파일을 읽고자 한다면 다음과 같이 할 수 있습니다.
SELECT *
FROM parquet.`S3명/2025/04/25/*`
정상적으로 잘 작동하며, 읽는데 그리 오래 걸리지도 않습니다. 아래의 스펙으로 테스트를 하였을 때 다음과 같은 결과가 나왔습니다.
Driver / Worker 스팩 같음
Worker 최대 10개
파일 크기 : 24GB
파일 개수 : 2,311개
위의 테스트 데이터를 읽어서 새로운 테이블을 만드는 시간을 총 22분 46초가 걸렸습니다. 아마도 파일 개수가 더 적고 파일의 크기가 컸다면 더욱 빠른 성능을 기대할 수 있었을 것입니다. 대규모 파이프라인에서는 이 방법이 좋지 않을 수 있겠으나, 소규모의 파이프라인의 경우 이 방법이 굉장히 유용할 것으로 보입니다.