Snowpipe 관리하기

이 항목에서는 Snowpipe 관리와 관련된 관리 작업에 대해 설명합니다.

이 항목의 내용:

Snowpipe가 데이터를 로드한 후 스테이징된 파일 삭제하기

파이프 오브젝트는 PURGE 복사 옵션을 지원하지 않습니다. 데이터가 테이블에 로드되면 Snowpipe는 스테이징된 파일을 자동으로 삭제할 수 없습니다.

더 이상 필요하지 않은 스테이징된 파일을 제거하려면 REMOVE 명령을 주기적으로 실행하여 파일을 삭제하는 것이 좋습니다.

또는 클라우드 저장소 서비스 공급자가 제공하는 수명 주기 관리 기능을 구성합니다.

내역 데이터 로드하기

참고

이 섹션의 정보는 이벤트 알림을 사용하여 자동화된 데이터 로드와 관련이 있습니다. Snowpipe REST API를 호출하면 추가 단계를 수행할 필요 없이 내역 데이터를 로드할 수 있습니다.

ALTER PIPE … REFRESH 문은 대상 테이블에 로드하기 위해 최근 7일 이내의 스테이징된 데이터 파일 세트를 Snowpipe 수집 큐에 복사합니다. 7일 이전의 스테이징된 파일에서 데이터를 로드하려면 다음 단계를 수행하는 것이 좋습니다.

  1. COPY INTO <테이블> 문을 실행하여 내역 데이터를 대상 테이블에 로드합니다.

  2. 이벤트 알림과 함께 Snowpipe를 사용하여 자동 데이터 로드를 구성합니다. 새로 스테이징된 파일이 대상 테이블에 수집하기 위한 이벤트 알림을 트리거합니다. 내역 데이터 파일은 이벤트 알림을 트리거하지 않으므로 두 번 로드되지 않습니다.

    자세한 지침은 다음을 참조하십시오.

    Amazon S3

    Amazon S3용 Snowpipe 자동화하기

    Google Cloud Storage

    Google Cloud Storage용 Snowpipe 자동화하기

    Microsoft Azure

    Microsoft Azure Blob 저장소용 Snowpipe 자동화하기

  3. ALTER PIPE … REFRESH 문을 실행하여 1단계와 2단계 사이에 스테이징된 모든 파일을 큐에 추가합니다. 이 문은 대상 테이블과 파이프 모두에 대한 로드 내역을 확인하여 동일한 파일이 두 번 로드되지 않도록 합니다.

파이프 다시 만들기

대부분의 파이프 속성을 수정하려면 파이프를 다시 생성해야 합니다(CREATE OR REPLACE PIPE 문 사용).

이 섹션에서는 파이프를 다시 생성할 때 준수해야 할 고려 사항과 모범 사례에 대해 설명합니다.

자동화된 데이터 로드를 위해 파이프 다시 만들기

이벤트 알림을 사용하여 데이터 로드를 자동화하는 파이프를 다시 생성하는 경우에는 다음 단계를 완료하는 것이 좋습니다.

  1. 파이프를 일시 중지합니다(ALTER PIPE … SET PIPE_EXECUTION_PAUSED = true 사용).

  2. SYSTEM$PIPE_STATUS 함수를 쿼리하여 파이프 실행 상태가 PAUSED 인지 확인합니다.

  3. 파이프를 다시 생성합니다(CREATE OR REPLACE PIPE 사용).

  4. 파이프를 다시 일시 중지합니다.

  5. 클라우드 메시징 서비스의 구성 단계를 검토하여 설정이 여전히 정확한지 확인합니다.

  6. 파이프를 재개합니다(ALTER PIPE … SET PIPE_EXECUTION_PAUSED = false 사용).

  7. SYSTEM$PIPE_STATUS 함수를 다시 쿼리하여 파이프 실행 상태가 RUNNING 인지 확인합니다.

로드 내역

Snowpipe 작업의 로드 내역은 파이프 오브젝트의 메타데이터에 저장됩니다. 파이프가 다시 생성되면 로드 내역이 삭제됩니다. 일반적으로 이 조건은 사용자가 이후에 파이프에서 ALTER PIPE … REFRESH 문을 실행하는 경우에만 사용자에게 영향을 줍니다. 이 작업을 수행하면 데이터가 이미 로드되고 이후에 파일이 삭제되지 않은 경우 파이프의 저장 위치에 있는 스테이징된 파일에서 중복 데이터를 로드할 수 있습니다.

참조된 스테이지의 클라우드 매개 변수 변경하기

외부 스테이지의 클라우드 매개 변수에 포함되는 사항은 다음과 같습니다.

  • URL

  • STORAGE_INTEGRATION

  • ENCRYPTION

Snowpipe가 구성된 후 참조된 스테이지의 클라우드 매개 변수를 수정해야 하는 경우에는 다음 단계를 완료하는 것이 좋습니다.

  1. 파이프를 일시 중지합니다(ALTER PIPE … SET PIPE_EXECUTION_PAUSED = true 사용). 현재 큐에 있는 모든 파일이 대상 테이블에 로드될 때까지 기다립니다.

  2. 스테이지 매개 변수를 필요에 따라 수정합니다(ALTER STAGE 사용).

  3. 파이프를 재개합니다(ALTER PIPE ... SET PIPE_EXECUTION_PAUSED = false 사용).

파이프는 트랜잭션이 아니므로, 이러한 단계에서 Snowpipe는 최신 스테이지 매개 변수 값을 사용하여 파일을 큐에 추가해야 합니다.

경고

스테이지의 AUTO_INGEST = TRUE 매개 변수를 수정하면 클라우드 메시징을 사용하여 데이터 로드(즉, URL)를 트리거하는 모든 종속 파이프의 작동이 중지될 수 있습니다.

파이프 소유권 이전하기

파이프의 소유권을 이전하려면 다음 단계를 수행합니다.

  1. PIPE_EXECUTION_PAUSED 매개 변수를 TRUE로 설정합니다.

    이 매개 변수를 통해 파이프의 일시 중지 또는 다시 시작이 설정됩니다. 이 매개 변수가 지원되는 수준은 다음과 같습니다.

    • 계정

    • 스키마

    • 파이프

    파이프 수준에서 오브젝트 소유자(또는 역할 계층에서 상위 역할)는 매개 변수를 설정하여 개별 파이프를 일시 중지하거나 재개할 수 있습니다.

    계정 관리자(ACCOUNTADMIN 역할의 사용자)는 계정 수준에서 이 매개 변수를 설정하여 계정의 모든 파이프를 일시 중지하거나 재개할 수 있습니다. 유사하게, 스키마에 대한 MODIFY 권한이 있는 사용자는 스키마 수준에서 파이프를 일시 중지하거나 재개할 수 있습니다. 이러한 상위 도메인 제어는 하위 수준에서 매개 변수가 아직 설정되지 않은 파이프(예: 오브젝트 수준 소유자)에만 영향을 준다는 점에 유의하십시오.

  2. GRANT OWNERSHIP 을 사용하여 파이프의 소유권을 이전합니다.

  3. 강제로 파이프를 재개합니다(SYSTEM$PIPE_FORCE_RESUME 사용).

    이 단계를 통해 새 소유자는 파이프 상태를 평가하고 SYSTEM$PIPE_STATUS 를 사용하여 로드 대기 중인 데이터 파일 수를 결정할 수 있습니다. 대상 테이블에 대한 로드가 승인된 파일만 큐에 있는지 확인하는 것이 좋습니다.

파이프 정의에서 COPY 문 수정하기

예를 들어, 열을 대상 테이블에 추가하는 경우와 같이 파이프 정의에서 COPY 문을 수정하려면 다음 단계를 수행합니다.

이 섹션의 명령을 실행하려면 사용자의 현재 역할에 파이프에 대한 OWNERSHIP 권한이 있어야 합니다.

  1. 파이프를 일시 중지합니다(ALTER PIPE … SET PIPE_EXECUTION_PAUSED=true 사용).

  2. SYSTEM$PIPE_STATUS 함수를 쿼리하여 파이프 실행 상태가 PAUSED 이고 대기 중인 파일 수가 0인지 확인합니다.

  3. 파이프를 다시 생성하여 정의에서 COPY 문을 변경합니다. 다음 옵션 중 1개 선택:

    • 파이프를 삭제(DROP PIPE 사용)하고 생성합니다(CREATE PIPE 사용).

    • 파이프를 다시 생성합니다(CREATE OR REPLACE PIPE 구문 사용). 파이프가 내부적으로 삭제된 후 생성됩니다.

  4. 파이프를 다시 일시 중지합니다.

  5. 클라우드 메시징 서비스의 구성 단계를 검토하여 설정이 여전히 정확한지 확인합니다.

  6. 파이프를 재개합니다(ALTER PIPE … SET PIPE_EXECUTION_PAUSED = false 사용).

  7. SYSTEM$PIPE_STATUS 함수를 다시 쿼리하여 파이프 실행 상태가 RUNNING 인지 확인합니다.

참고

파일 로드 메타데이터는 테이블이 아닌 파이프 오브젝트 와 연결됩니다. 파이프를 다시 생성하면 로드된 파일의 내역이 제거됩니다. Snowpipe에 의해 이미 로드된 파일이 실수로 파이프에 다시 제출되어 대상 테이블에 다시 로드되지 않도록 해야 합니다. 테이블에 대한 쿼리 내역을 살펴보려면 COPY_HISTORY 함수를 쿼리합니다.

부실 파이프 다시 시작하기

참고

이 섹션은 클라우드 메시징을 활용하여 데이터 로드를 트리거하는 파이프 오브젝트(즉, 파이프 정의의 AUTO_INGEST = TRUE)에만 적용됩니다.

파이프가 일시 중지되는 경우, 파이프에 수신된 이벤트 메시지에서는 제한적인 보존 기간이 시작됩니다. 이 기간은 기본적으로 14일입니다. 파이프가 14일을 초과하여 일시 중지되면 부실한 것으로 간주됩니다.

부실 파이프를 재개하려면 해당 권한이 있는 역할이 SYSTEM$PIPE_FORCE_RESUME 함수를 호출하고 STALENESS_CHECK_OVERRIDE 인자를 입력해야 합니다. 이 인자는 역할이 부실 파이프의 다시 시작을 파악하고 있음을 나타냅니다.

예를 들어, mydb.myschema 데이터베이스 및 스키마에서 부실 stalepipe1 파이프를 재개합니다.

SELECT SYSTEM$PIPE_FORCE_RESUME('mydb.myschema.stalepipe1','staleness_check_override');
Copy

부실 파이프가 일시 중지된 동안 파이프의 소유권이 다른 역할로 이전된 경우 파이프를 다시 시작하려면 OWNERSHIP_TRANSFER_CHECK_OVERRIDE 인자가 추가적으로 필요합니다. 예를 들어, 새 역할로 이전된 mydb.myschema 데이터베이스 및 스키마에서 부실 stalepipe2 파이프를 재개합니다.

SELECT SYSTEM$PIPE_FORCE_RESUME('mydb.myschema.stalepipe1','staleness_check_override, ownership_transfer_check_override');
Copy

파이프가 일시 중지된 동안 수신된 이벤트 알림에서 제한 보존 기간이 경과하면 Snowflake는 이를 내부 메타데이터에서 삭제하도록 예약합니다. 파이프가 나중에 재개되면 Snowpipe는 이러한 오래된 알림을 처리하기 위해 최선을 다합니다. Snowflake는 이러한 오래된 알림의 처리를 보장하지 않습니다.

예를 들어, 파이프가 일시 중지된 날로부터 15일 후에 다시 시작되면 Snowpipe는 일반적으로 파이프의 일시 중지된 첫날(즉, 14일 초과)에 수신된 이벤트 알림을 건너뜁니다. 파이프가 일시 중지된 날로부터 16일 후에 재개되는 경우 Snowpipe는 일반적으로 파이프가 일시 중지된 날로부터 1일 및 2일 후에 수신된 이벤트 알림을 건너뜁니다. 이후에도 같은 방식으로 작동합니다.