PIPE 객체

PIPE 객체

PIPE 객체는 Snowpipe Streaming의 서버 측 처리 계층입니다. 모든 스트리밍 수집은 파이프를 통과하며, 파이프는 스키마 검증, 선택적 수집 중 데이터 변환(in-flight transformations), 선택적 사전 클러스터링(pre-clustering)을 처리한 다음 데이터를 대상 테이블에 커밋합니다.

PIPE 객체는 다음 기능을 제공합니다.

  • 수집 중 변환(In-flight transformations): COPY 명령 변환 구문을 사용해 수집 중에 열 재배열, 타입 캐스팅, 표현식 적용을 수행합니다. 이로써 별도 ETL 단계 없이 수집 시점에 데이터 정리와 재구성을 가능하게 합니다.
  • 사전 클러스터링(Pre-clustering): 최적화된 쿼리 성능을 위해 테이블 클러스터링 키를 기준으로 수집 중 데이터를 정렬합니다.
  • 서버 측 스키마 검증: 커밋 전에 파이프에 정의된 스키마에 대해 들어오는 데이터를 검증합니다.
  • 테이블 기능 지원: 정의된 클러스터링 키, DEFAULT 값 열, AUTOINCREMENT(또는 IDENTITY) 열이 있는 테이블로 수집할 수 있습니다.

빠른 설정을 위해 Snowflake는 모든 테이블에 대해 기본 파이프(default pipe) 를 자동으로 생성합니다. 기본 파이프는 수동 DDL 없이 수집을 처리합니다. 변환이나 사전 클러스터링이 필요한 고급 사용 사례에는 커스텀 명명 파이프를 만들 수 있습니다. 자세한 내용은 CREATE PIPE 를 참고하세요.

출처: Snowflake 문서

본문

기본 파이프(Default pipe)

Snowflake는 모든 대상 테이블에 기본 파이프를 제공합니다. 기본 파이프는 대상 테이블에 대한 첫 번째 성공적인 pipe-info 호출, Named Channel open 호출, 또는 Elastic 테이블 엔드포인트 요청 후에 요청 시(on demand) 생성됩니다. 모든 스트리밍 파이프에는 암시적 ELASTIC 채널이 포함됩니다. Elastic 테이블 엔드포인트는 별도의 open-channel 작업 없이 그 채널을 사용합니다. 이를 통해 CREATE PIPE DDL 문을 수동으로 실행하지 않고도 즉시 데이터 스트리밍을 시작할 수 있습니다.

기본 파이프는 다음 테이블 기능을 지원합니다.

  • 클러스터링 키: 대상 테이블에 클러스터링 키가 정의되어 있으면 기본 파이프는 최적화된 쿼리 성능을 위해 수집 중 데이터를 정렬합니다(사전 클러스터링).
  • AUTOINCREMENT 및 IDENTITY 열: 기본 파이프는 대상 테이블의 AUTOINCREMENT 및 IDENTITY 열에 대한 값을 자동으로 생성합니다.
  • DEFAULT 값 열: 소스 페이로드가 해당 열에 값을 포함하지 않을 때 기본 파이프는 정의된 DEFAULT 값을 적용합니다.

기본 파이프는 다음 제한 사항이 있습니다.

  • 변환 없음: 기본 파이프는 기본 copy 문에서 MATCH_BY_COLUMN_NAME을 사용합니다. 수집 중 데이터 변환을 지원하지 않습니다.

워크플로에 변환이 필요한 경우 직접 명명 파이프를 만드세요. 자세한 내용은 CREATE PIPE 를 참고하세요.

Snowpipe Streaming SDK 또는 REST API를 구성할 때 클라이언트 구성에서 기본 파이프 이름을 참조해 스트리밍을 시작할 수 있습니다. 자세한 내용은 튜토리얼: SDK로 Named Channel 시작하기 및 튜토리얼: REST API로 Named Channel 시작하기 를 참고하세요.

수집 중 데이터 사전 클러스터링

Snowpipe Streaming은 수집 중에 데이터를 클러스터링할 수 있어 대상 테이블의 쿼리 성능을 향상시킵니다. 이 기능은 데이터가 커밋되기 전에 수집 중 직접 데이터를 정렬합니다.

사전 클러스터링을 사용하려면 대상 테이블에 클러스터링 키가 정의되어 있어야 합니다. 그런 다음 Snowpipe Streaming 파이프를 만들거나 교체할 때 COPY INTO 문에서 파라미터 CLUSTER_AT_INGEST_TIME을 TRUE로 설정해 이 기능을 활성화할 수 있습니다.

자세한 내용은 CLUSTER_AT_INGEST_TIME 을 참고하세요.

중요

사전 클러스터링 기능을 사용할 때는 대상 테이블의 자동 클러스터링 기능을 비활성화하지 마세요. 자동 클러스터링을 비활성화하면 시간이 지나면서 쿼리 성능이 저하될 수 있습니다.

바이너리 열 인코딩

Snowflake는 세 가지 바이너리 인코딩을 지원합니다: BASE64, HEX, UTF-8. SDK가 사용하는 인코딩은 파이프 타입에 따라 다릅니다.

  • 기본 파이프: 바이너리 열에 항상 BASE64를 사용합니다. 이 동작은 고정되어 있으며 계정 수준 또는 세션 수준 파라미터와 무관합니다.
  • 커스텀 파이프: 계정 수준 BINARY_INPUT_FORMAT 파라미터에 의해 결정되는 인코딩을 사용합니다.

Snowpipe Streaming SDK는 클라이언트 생성 시 pipe-info API를 통해 유효한 BINARY_INPUT_FORMAT을 가져오고 그에 따라 바이트 배열을 인코딩합니다. SDK는 pipe-info를 주기적으로 갱신합니다. 세션 중에 유효한 BINARY_INPUT_FORMAT이 변경되면 클라이언트가 무효화되므로 닫고 다시 열어야 합니다.

SDK는 문자열 입력 값의 인코딩을 검증하거나 추론하지 않습니다. 문자열 값을 바이너리 열로 수집한다면 문자열 인코딩이 파이프의 유효한 BINARY_INPUT_FORMAT과 일치하는지 확인하세요.

더 알아보기 (Learn more)