주요 컨텐츠로 이동

Delta Lake 및 Apache Spark의 Variant 데이터 타입 소개

반정형 데이터 작업 시 더 빠른 처리와 향상된 유연성

Introducing the Open Variant Data Type in Delta Lake and Apache Spark

발행일: 2024년 6월 26일

데이터 엔지니어링Less than a minute

반정형 데이터를 위한 새로운 데이터 타입인 variant를 발표하게 되어 기쁩니다. Variant는 중첩이 많고 스키마가 계속 변경되는 데이터를 지원하는 유연성을 유지하면서도, 이러한 데이터를 JSON 문자열로 저장하는 것에 비해 성능을 획기적으로 향상시킵니다.

반정형 데이터 작업은 Lakehouse의 핵심 기능이었습니다. Endpoint Detection & Response (EDR), 광고 클릭 분석, IoT 원격 분석 등은 반정형 데이터에 의존하는 인기 있는 사용 사례입니다. 저희는 점점 더 많은 고객들이 기존 데이터 웨어하우스에서 전환함에 따라, 해당 데이터 웨어하우스에서 제공하는 variant 데이터 타입을 사용하고 있으며, 종속성을 피하기 위해 이에 대한 오픈 소스 표준이 나오기를 바란다는 의견을 들었습니다.

오픈 variant 타입은 Apache Spark 오픈 소스 커뮤니티 및 Linux Foundation Delta Lake 커뮤니티와의 협력을 통해 탄생했습니다:

  • Variant 데이터 타입, Variant 바이너리 표현식 및 Variant 바이너리 인코딩 형식은 이미 오픈 소스 Spark에 병합되었습니다. 바이너리 인코딩에 대한 자세한 내용은 여기에서 확인할 수 있습니다.
  • 바이너리 인코딩 형식은 문자열에 비해 데이터에 대한 액세스 및 탐색 속도를 높여줍니다. Variant 바이너리 인코딩 형식의 구현은 오픈 소스 라이브러리로 패키징되어 다른 프로젝트에서도 사용할 수 있습니다.
  • Variant 데이터 타입에 대한 지원 또한 Delta에 오픈 소스화되었으며, 프로토콜 RFC는 여기에서 찾을 수 있습니다. Variant 지원은 Spark 4.0 및 Delta 4.0에 포함될 예정입니다.
 “저희는 오픈 소스 커뮤니티를 지지하며, 오픈 소스 데이터 플랫폼 Legend를 통해 데이터에 중점을 두고 있습니다.”라고 Goldman Sachs의 최고 데이터 책임자 겸 데이터 엔지니어링 책임자인 Neema Raphael은 말했습니다. “Spark에서 오픈 소스 Variant의 출시는 개방형 데이터 생태계를 위한 또 하나의 훌륭한 발전입니다.”

그리고 DBR 15.3부터는 위에서 언급된 모든 기능들을 고객들이 사용할 수 있게 됩니다.

Variant란 무엇인가요?

Variant는 반정형 데이터를 저장하기 위한 새로운 데이터 타입입니다. 곧 출시될 Databricks Runtime 15.3의 Public Preview에서는 JSON을 통한 계층적 데이터의 입력 및 출력이 지원될 예정입니다. Variant가 없었다면 고객들은 유연성과 성능 사이에서 선택해야 했습니다. 유연성을 유지하기 위해 고객들은 JSON을 문자열로 단일 열에 저장했습니다. 더 나은 성능을 위해서는 struct를 사용하여 엄격한 스키마화 접근 방식을 적용했는데, 이는 스키마 변경 시 별도의 프로세스를 유지하고 업데이트해야 했습니다. Variant를 사용하면 고객은 유연성을 유지할 수 있으며(명시적인 스키마를 정의할 필요가 없음), JSON을 문자열로 쿼리하는 것에 비해 훨씬 향상된 성능을 얻을 수 있습니다.

Variant는 JSON 소스의 스키마가 알려지지 않았거나, 변경되거나, 자주 진화하는 경우 특히 유용합니다. 예를 들어, 고객들은 서로 다른 JSON 스키마를 포함하는 로그를 읽고 결합해야 하는 Endpoint Detection & Response (EDR) 사용 사례를 공유했습니다. 마찬가지로, 스키마가 알려지지 않고 계속 변경되는 광고 클릭 및 애플리케이션 원격 분석과 관련된 사용 사례의 경우 Variant가 적합합니다. 두 경우 모두 Variant 데이터 타입의 유연성을 통해 명시적인 스키마 없이도 데이터를 효율적으로 수집하고 처리할 수 있습니다.

성능 벤치마크

Variant는 JSON을 문자열로 유지하는 기존 워크로드에 비해 향상된 성능을 제공할 것입니다. 저희는 고객 데이터에서 영감을 받은 스키마를 사용하여 문자열 대 Variant 성능을 비교하는 여러 벤치마크를 실행했습니다. 중첩 및 평면 스키마 모두에서 Variant를 사용한 성능은 문자열 열에 비해 8배 향상되었습니다. 벤치마크는 Photon이 활성화된 Databricks Runtime 15.0에서 수행되었습니다.

Variant는 어떻게 사용할 수 있나요?

Variant 타입을 지원하는 여러 새로운 함수가 있으며, 이를 통해 variant의 스키마를 검사하고, variant 열을 확장하고, JSON으로 변환할 수 있습니다. PARSE_JSON() 함수는 JSON 문자열 입력을 나타내는 variant 값을 반환하는 데 일반적으로 사용될 것입니다.

기술 가이드 eBook

ETL 시작하기

Variant 데이터를 로드하려면 Variant 타입의 테이블 열을 생성할 수 있습니다. PARSE_JSON() 함수를 사용하여 모든 JSON 형식의 문자열을 Variant로 변환하고 Variant 열에 삽입할 수 있습니다.

CTAS를 사용하여 Variant 열이 있는 테이블을 생성할 수 있습니다. 생성되는 테이블의 스키마는 쿼리 결과에서 파생됩니다. 따라서 테이블을 생성하려면 쿼리 결과에 Variant 열이 포함되어야 합니다.

COPY INTO를 사용하여 하나 이상의 Variant 열이 있는 테이블로 JSON 데이터를 복사할 수도 있습니다.

경로 탐색은 직관적인 점 표기법 구문을 따릅니다.

완전 오픈 소스, 독점 데이터 종속성 없음

요약하자면:

  1. Variant 데이터 타입, 바이너리 표현식 및 바이너리 인코딩 형식은 이미 Apache Spark에 병합되었습니다. 바이너리 인코딩 형식은 여기에서 자세히 검토할 수 있습니다.
  2. 바이너리 인코딩 형식은 문자열에 비해 데이터에 대한 액세스 및 탐색 속도를 높여줍니다. 바이너리 인코딩 형식의 구현은 오픈 소스 라이브러리로 패키징되어 다른 프로젝트에서도 사용할 수 있습니다.
  3. Variant 데이터 타입에 대한 지원 또한 Delta에 오픈 소스화되었으며, 프로토콜 RFC는 여기에서 찾을 수 있습니다. Variant 지원은 Spark 4.0 및 Delta 4.0에 포함될 예정입니다.

또한, Variant 타입에 대한 shredding/sub-columnarization을 구현할 계획입니다. Shredding은 Variant 데이터 내의 특정 경로를 쿼리하는 성능을 향상시키는 기술입니다. Shredding을 사용하면 경로를 자체 열에 저장할 수 있으며, 이는 해당 경로를 쿼리하는 데 필요한 IO 및 계산을 줄일 수 있습니다. Shredding은 또한 불필요한 추가 작업을 피하기 위해 데이터 프루닝을 가능하게 합니다. Shredding은 Apache Spark 및 Delta Lake에서도 사용할 수 있게 될 것입니다.

올해 6월 10일부터 13일까지 샌프란시스코에서 열리는 DATA + AI Summit에 참석하시나요?
"Variant Data Type - Making Semi-Structured Data Fast and Simple" 세션에 참여해 보세요.

Variant는 Databricks Runtime 15.3 Public Preview 및 DBSQL Preview 채널에서 곧 기본적으로 활성화될 예정입니다. 반정형 데이터 사용 사례를 테스트하고, 생각이 있으시거나 질문이 있으시면 Databricks 커뮤니티 포럼에서 대화를 시작하세요. 커뮤니티의 의견을 듣고 싶습니다!

(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)

게시물을 놓치지 마세요

관심 있는 카테고리를 구독하고 최신 게시물을 받은편지함으로 받아보세요