Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

프로젝션의 일관성, 선택 순서와 보존 정책

프로젝션은 원본 데이터셋의 일부 또는 전체 열을 특정 접근 패턴에 맞춰 저장한 별도 데이터셋입니다. 원본은 canonical 또는 projected 데이터셋이라고 부르고, 관리되는 하위 데이터셋을 projection 데이터셋이라고 부릅니다.

프로젝션을 추가해도 데이터셋 읽기의 논리적 결과는 바뀌지 않습니다. 조회에 필요한 열이 프로젝션의 열 범위에 모두 포함되어야 해당 프로젝션으로 읽을 수 있습니다.

원본 변경과 읽기

원본 상태조회에 미치는 영향
프로젝션이 최신 상태지원되는 조회를 최적화된 표현으로 처리합니다.
마지막 빌드 이후 APPEND 발생프로젝션과 새 원본 구간을 조합하여 최신 결과를 유지할 수 있습니다.
새 SNAPSHOT 발생이전 프로젝션은 완전히 오래된 상태가 되어 다시 빌드하기 전까지 이점이 없습니다.

물리적 배치는 대략 전역으로 정렬한 형식 또는 해시 버킷별로 로컬 정렬한 형식입니다. 버킷 열과 정렬 열이 같아야 하는 것은 아닙니다.

하위 데이터셋과 브랜치

프로젝션 데이터셋은 일반 리소스 목록에 표시되지 않지만 원본의 Projections 탭에 있는 링크로 접근할 수 있습니다. 프로젝션 빌드가 활성화된 원본 브랜치마다 대응하는 프로젝션 브랜치가 있습니다. 원본 데이터셋을 삭제하면 연결된 프로젝션도 삭제됩니다.

Noho가 이 하위 데이터와 구성을 관리합니다. 파일 경로를 직접 조작하는 사용자 코드용 저장 배치로 취급하지 않습니다.

비동기 빌드 주기

프로젝션은 일반 Foundry 빌드 시스템에서 비동기로 갱신합니다. 원본이 갱신되면 독자는 즉시 일관된 원본 뷰를 읽을 수 있고, 프로젝션은 이후 별도 빌드로 따라갑니다. 빌드 스케줄은 자동 생성되지 않으므로 Projections 탭에서 설정해야 합니다.

주기는 아직 프로젝션에 들어가지 않은 구간을 읽어도 질의 성능 목표를 충족하는지에 따라 정합니다. 예를 들어 원본이 시간당 10GB씩 늘고 필터 조회가 최대 100GB를 추가로 읽을 수 있다면 적어도 10시간마다 프로젝션을 빌드하는 구성을 검토합니다.

프로젝션 빌드는 실행기 수를 자동 조정합니다. 실패하거나 너무 오래 걸리지 않는 한 Spark 프로필을 직접 바꿀 필요는 없습니다. 프로젝션의 연산 및 저장 비용은 원본 데이터셋이 속한 프로젝트에 귀속됩니다.

컴팩션

프로젝션 빌드는 작은 정렬 파일들을 더 큰 정렬 파일로 합치는 컴팩션을 자동으로 수행합니다. 원본의 증분 트랜잭션 수가 늘어도 조회가 그 모든 작은 파일을 직접 읽는 부담을 줄일 수 있습니다.

가끔 빌드가 평소보다 오래 걸리면 컴팩션을 수행 중인지 확인합니다. 프로젝션은 원본을 다시 쓰는 것이 아니므로 원본 자체의 파일 수와 트랜잭션 수가 사라지는 것은 아닙니다.

질의에 사용할 프로젝션 선택

질의를 만족하는 프로젝션이 있으면 원본보다 우선 선택합니다. 원본의 배치가 특정 질의에 더 유리해 보이더라도 이 선택 규칙을 적용합니다.

필터

필터에 사용할 수 있는 정렬 열 수가 많은 프로젝션이 우선이며, 같은 범위에서는 전역 정렬이 로컬 정렬보다 우선합니다. x = 1 AND y = 2의 우선순위 예시는 다음과 같습니다.

  1. x와 y로 전역 정렬
  2. x와 y로 로컬 정렬하고 임의의 열로 버킷 구성
  3. x로 전역 정렬
  4. x로 로컬 정렬하고 임의의 열로 버킷 구성

조인

정확히 같은 조인 열 집합으로 버킷을 나눈 프로젝션이 우선합니다. 버킷 수와 실제 정렬 활용 조건은 조인 최적화에서 확인합니다.

필터와 조인 함께 사용

F 열로 필터링하고 J 열로 조인하는 경우의 우선순위는 다음과 같습니다.

  1. J로 버킷을 나누고 F로 로컬 정렬
  2. F로 전역 정렬
  3. J가 아닌 다른 열로 버킷을 나누고 F로 로컬 정렬
  4. J로 버킷을 나누고 F가 아닌 열로 로컬 정렬

이 순서는 일반적으로 필터가 충분히 선택적이라는 가정 아래 필터 최적화를 중시합니다. 모든 실제 질의에서 가장 빠른 배치를 비용 기반으로 골라 준다는 뜻은 아닙니다.

컴팩션 뒤 남은 파일 정리

컴팩션이 새 파일로 데이터를 대체해도 이전 파일은 과거 트랜잭션에 남아 저장 공간을 사용할 수 있습니다. 이 공간을 회수하려면 원본이 아닌 프로젝션 데이터셋을 대상으로 사용자 지정 Retention 정책을 구성합니다.

해당 공간의 Retention Policies에서 다음 조건을 지정합니다.

  1. 데이터셋 선택기에 transforms dataset 조건을 추가하고 Select 모드에서 변환 유형을 projection으로 지정합니다.
  2. 트랜잭션 선택기로 No files in active view를 추가합니다.
  3. Allow deletion from latest view를 켜서 최신 뷰의 구성에 포함되어 있어도 파일이 대체된 트랜잭션을 삭제할 수 있게 합니다.
  4. Ignore hidden files를 켜서 빌드 로그 같은 숨김 파일 때문에 대체된 데이터 파일의 트랜잭션 정리가 막히지 않도록 합니다.

대상은 projection 유형의 하위 데이터셋입니다. 이 삭제 조건을 원본 데이터셋의 일반 보존 정책으로 그대로 적용하지 않습니다. 선택기와 최신 뷰 삭제의 의미는 Retention 정책에서 확인하고 정책이 선택하는 범위를 검토합니다.