OpenLineage 이벤트 리스너

OpenLineage 이벤트 리스너 (OpenLineage event listener)

OpenLineage 이벤트 리스너 플러그인은 OpenLineage 스펙에 맞춰 JSON 형식으로 인코딩된 계보(lineage) 정보를 지정된 URI로 POST해서 외부의 OpenLineage 호환 API로 스트리밍해 주는 기능이에요.

출처: 문서

본문

이 이벤트 리스너는 Trino 테이블을 생성하거나 수정하는 모든 쿼리를 포착해 계보 정보로 변환하는 것을 목표로 해요. 계보(lineage)는 데이터/테이블 사이의 관계·흐름으로 이해할 수 있어요. OpenLineage는 Spark, Airflow, Flink를 비롯한 다양한 시스템에서 계보 정보를 수집하기 위해 널리 쓰이는 오픈소스 표준이에요.

Trino 쿼리 속성과 OpenLineage 속성의 매핑

Trino OpenLineage
UUIDv7(Query.createTime, hash(Query.Id)) Run ID
queryCreatedEvent.getCreateTime() 또는 queryCompletedEvent.getEndTime() Run Event Time
Query Id Job Facet Name (기본값, 덮어쓸 수 있음)
trino:// + openlineage-event-listener.trino.uri.getHost() + : + openlineage-event-listener.trino.uri.getPort() Job Facet Namespace (기본값, 덮어쓸 수 있음)
{schema}.{table} Dataset Name
trino:// + openlineage-event-listener.trino.uri.getHost() + : + openlineage-event-listener.trino.uri.getPort() Dataset Namespace

사용 가능한 Trino Facet (Available Trino Facets)

Trino Metadata

다음 속성을 담는 Facet이에요:

  • queryPlan
  • transactionId — 쿼리 처리에 사용된 트랜잭션 id

OpenLineage Run Event가 생성된 기반 쿼리와 관련이 있어요. StartComplete/Fail OpenLineage 이벤트 양쪽에서 사용할 수 있어요.

이 facet을 비활성화하려면 openlineage-event-listener.disabled-facetstrino_metadata를 추가하세요.

Trino Query Context

다음 속성을 담는 Facet이에요:

  • serverVersion — 쿼리 처리에 사용된 Trino 서버 버전
  • environment노드 속성(Node properties)node.environment에서 상속
  • queryTypeopenlineage-event-listener.trino.include-query-types로 설정된 쿼리 유형 중 하나

OpenLineage Run Event가 생성된 기반 쿼리와 관련이 있어요. StartComplete/Fail OpenLineage 이벤트 양쪽에서 사용할 수 있어요.

이 facet을 비활성화하려면 openlineage-event-listener.disabled-facetstrino_query_context를 추가하세요.

Trino Query Statistics

완료된 쿼리의 통계 전체 내용을 담는 Facet이에요. OpenLineage Complete/Fail 이벤트에서만 사용할 수 있어요.

이 facet을 비활성화하려면 openlineage-event-listener.disabled-facetstrino_query_statistics를 추가하세요.

요구사항 (Requirements)

다음 단계를 수행해야 해요:

  • JSON 본문의 POST 이벤트를 받아들이고 OpenLineage API 형식과 호환되는 HTTP/S 서비스를 준비하세요.
  • 이벤트 리스너 속성 파일에서 openlineage-event-listener.transport.url을 서비스의 URI로 설정하세요.
  • openlineage-event-listener.trino.uri를 설정해서 생성된 이벤트 안에 올바른 OpenLineage job namespace가 렌더링되게 하세요. scheme, host, port를 갖춘 올바른 URI여야 해요. (그렇지 않으면 플러그인이 시작에 실패해요.)
  • 설정 섹션에 자세히 나온 대로 보낼 이벤트를 지정하세요.

설정 (Configuration)

OpenLineage 이벤트 리스너를 설정하려면 etcopenlineage-event-listener.properties라는 이벤트 리스너 속성 파일을 만들고, 최소 요구 설정의 예시로 다음 내용을 넣어 주세요:

event-listener.name=openlineage
openlineage-event-listener.trino.uri=

코디네이터의 etc/config.properties에는 이벤트 리스너 설정 파일을 등록해야 해요:

event-listener.config-files=etc/openlineage-event-listener.properties,...

POST 요청에 커스텀 HTTP 헤더를 추가하려면 다음처럼 쉼표로 구분해 지정할 수 있어요:

openlineage-event-listener.transport.headers="Header-Name-1:header value 1,Header-Value-2:header value 2,..."

URL 파라미터도 비슷하게 지정할 수 있어요:

openlineage-event-listener.transport.url-params="Param-Name-1:param value 1,Param-Value-2:param value 2,..."

더 알아보기 (Learn more)

OpenLineage 표준 자체에 대해 더 알고 싶다면 OpenLineage 공식 사이트를 참고하세요.