SNOWFLAKE 와 DataHub를 이용한 데이터 카탈로그 구축하기

Gyosun
Snowflake Korea
Published in
8 min readAug 31, 2022

SNOWFLAKE는 Public 클라우드 환경에서 대용량의 데이터를 수집, 분석, 공유하기 위한 다양한 서비스를 제공하는 SaaS 서비스 입니다. 데이터는 모두 SNOWFLAKE의 테이블에 저장이 되기 때문에 SNOWFLAKE는 Single Source of Truth 저장소가 되며 다양한 분석 쿼리를 실행하는 중앙 엔진으로 동작하게 됩니다.

데이터가 모두 SNOWFLAKE에 저장이 되기 때문에 비즈니스 분석가 혹은 현업 입장에서는 “어떤 데이터들이 SNOWFLAKE 저장”되어 있으며, “어떤 과정을 거쳐 테이블들이 생성”되었는지, “테이블이 변경되었을 때, 어떤 영향을 미치는지"에 대해서 확인하는 것이 매우 중요합니다.

위와 같은 목적으로 도입되는 서비스 혹은 툴을 데이터 카탈로그 / 데이터 디스커버리 플랫폼 / 메타데이터 플랫폼 서비스 라고 부르며, 많은 데이터 카탈로그 툴들이 SNOWFLAKE에 있는 메타 데이터들을 수집하여, 비즈니스 사용자들이 손쉽게 메타 데이터를 검색하고, 관계를 분석할 수 있는 기능을 제공하고 있습니다.

이번 블로그에서는 “Modern Metadata Management / Data Catalog” 제품 / 서비스인 Datahub와 SNOWFLAKE 간의 연계 및 관련 기능을 살펴보도록 하겠습니다.

DataHub 소개

DataHub는 Linkedin에서 Modern Data Catalog 서비스를 제공하고 있으며, End-to-End data discovery, data observability, data governance 기능을 제공하는 플랫폼입니다. 주요 기능 중 아래와 같은 특징들을 제공하고 있습니다.

  1. Data Lake, Airflow, SNOWFLAKE, Superset 간의 E2E Lineage 제공
  2. Dependency Check
  3. Business Level의 용어 정의 및 검색, 테이블 메타 데이터 검색 등

DataHub 설치

DataHub는 docker 컨테이너 형태로 설치 및 실행할 수 있으며, 상세한 절차는 아래의 링크를 통해서 확인이 가능합니다.

DataHub를 설치하면 DataHub 이외에도 Elasticsearch, Kafka, MySQL 등이 설치되며, 여러 컴포넌트를 통해서 서비스를 제공하는 것을 확인할 수 있습니다.

DataHub와 SNOWFLAKE 연계 및 사용하기

DataHub 설치가 완료되면 “localhost:9002”을 통해서 접속 할 수 있으며, Default 사용자명과 패스워드는 “datahub/datahub” 입니다.

DataHub 접속 화면

SNOWFLAKE의 Metadata를 수집하기 위해서는 SNOWFLAKE와 DataHub간의 연결을 설정해야 하며, 해당 기능은 DataHub 오른쪽 상단의 Ingestion 메뉴를 통해 손쉽게 수행할 수 있습니다.

Ingestion 메뉴 선택 후 Create new source를 선택하며, DataHub 메타 데이터를 수집할 수 있는 서비스를 확인할 수 있습니다.

0.8.43 버전 기준 14개 서비스 + Custom 연계 가능

SNOWFLAKE에는 SNOWFLAKE_SAMPLE_DATA라 불리는 테스트용 데이터베이스가 존재하며, 테스트 데이터에 대한 메타데이터 수집은 필요 없을 수 있습니다. 위와 같이 DataHub에서 메타데이터를 수집 할 때, 정규표현식 필터를 기반으로 수집이 필요한 혹은 수집을 제외할 데이터베이스, 스키마, 테이블에 대한 정의를 수행할 수 있습니다.

필터 기반으로 데이터베이스 수집 제외

위와 같이 SNOWFLAKE에 대한 접속 정보 및 메타 데이터 수집을 위한 스케쥴링 정보를 UI에서 입력하면 정해진 시간에 SNOWFLAKE에 있는 메타 데이터를 자동적으로 수집할 수 있으며, 메뉴얼하게 수집도 가능합니다.

위의 설정 파라미터 중 Warehouse를 선택 하는 부분이 있는데, SNOWFLAKE는 사용자 요구사항 및 워크로드에 맞춰 엔진을 배포할 수 있는 기능을 제공하고 있습니다.

이렇게 생성된 엔진들은 서로 완벽하게 분리된 상황에서 워크로드를 처리하기 때문에 서로 간에 간섭이 없는 환경을 제공합니다. 메타데이터를 수집하느라 분석 쿼리의 시간이 느려지는 황당한 일은 SNOWFLAKE에서는 더 이상 없습니다.

메타데이터 수집은 SNOWFLAKE 에서 어떤 모습으로 보일까요?

SNOWFLAKE가 제공하는 SNOWSIGHT UI에는 Query History 기능이 존재하여, 현재 계정에서 수행되는 모든 쿼리에 대한 결과를 확인할 수 있습니다.

SNOWFLAKE QUERY HISTORY — DataHub에서 발생된 쿼리

위의 화면에서 보는 것처럼, DataHub는 INFORMATION_SCHEMA 에 존재하는 여러 메타 정보들을 가져와서 테이블, 컬럼, 데이터베이스에 대한 상세 정보를 수집하며, 각 테이블에 대해서는 APPROX_COUNT_DISTINCT 함수들을 사용하여, 중복을 제외한 컬럼 값의 수를 대략적으로 수집합니다.

메타데이터를 수집하는데는 많은 컴퓨팅 자원을 사용하는 것보다는 빠르게 결과를 획득하는 것이 더 중요할 수 있습니다. 그렇기 때문에 HyperLog 기반의 함수를 사용하여 근사치에 해당하는 값을 가져와서 표현을 하게 됩니다.

이렇게 수집된 테이블에 대한 정보는 DataHub UI를 통해서 손쉽게 검색 및 조회를 수행할 수 있습니다.

customer 테이블의 컬럼 정보 및 컬럼 내 값에 대한 구성 확인

SNOWFLAKE와 DataHub 모두 데이터베이스, 테이블, 컬럼, 주석등에서 사용할 수 있는 한글을 모두 완벽하게 지원하고 있습니다. 그렇기 때문에 한글 기반의 메타 데이터 검색도 손쉽게 사용하실 수 있습니다.

한글 검색

SNOWFLAKE 는 JSON 데이터를 저장할 때 내부적으로 Columnized 된 파일 형태로 저장하며, Native SQL을 통해 JSON을 구성하는 Key 값에 대한 조회를 수행할 수 있습니다.

그렇기 때문에 JSON 원본 테이블에 원본 데이터를 수집 한 후, View를 통해서 정형화된 테이블 형태로 구성하여 손쉽게 사용할 수 있습니다. 간략하게 하나의 예제를 통해서 Table / View 간의 관계를 설명드렸듯이, 데이터 플랫폼 내에서 여러가지 관계를 가지고 있습니다.

Data Lineage in SNOWFLAKE

데이터 수집을 위해 S3 에서 Table 로 데이터를 로딩하며, Table에 있는 데이터를 Mart성 테이블로 다시 Transformation 하는 등 내부에도 여러 파이프라인이 존재합니다.

DataHub는 SNOWFLAKE 뿐만 아니라 Modern Data Stack을 구성하는 다양한 서비스인 AirFlow, SuperSet, DataLake 와의 연계를 통해서 E2E에 대한 Data Lineage도 표현을 할 수 있습니다.

S3, Airflow, SNOWFLAKE, SuperSet E2E Lineage

DataHub와 Airflow와의 연계는 아래의 링크를 통해서 확인하실 수 있습니다.

이외에도 DataHub 는 수집된 메타 데이터를 기반으로 비즈니스 용어 정의, 도메인 정의 및 이를 기반으로 검색등 다양한 기능들을 추가적으로 제공하고 있습니다.

DataHub는 SNOWFLAKE 기반의 데이터 카탈로그 서비스를 선택 하는데 있어 매우 좋은 선택지임이 분명하며, SNOWFLAKE가 제공하는 다양한 기능과 합쳐져서 더욱 강력한 서비스를 제공하고 있습니다.

--

--