데이터 파이프라인을 위한 다중 위치 복원력¶
데이터 파이프라인을 위한 다중 위치 복원력은 잠재적인 리전 전체 클라우드 공급자 중단으로부터 데이터 파이프라인을 보호하는 데 도움이 됩니다. 이 기능을 사용하면 보조 위치로 장애 조치할 때 데이터 파이프라인(특히 Snowpipe 및 COPY INTO를 사용하는 데이터 파이프라인)은 중단이나 중복 수집 없이 새 데이터 로딩을 재개합니다.
이 기능은 클라우드 간에 작동하므로 기본 및 백업 저장소 위치가 완전히 다른 클라우드 공급자(예: AWS에서 Azure로 장애 조치)에 걸쳐 있을 수 있을 뿐 아니라 동일한 클라우드 내의 리전 간에 작동할 수 있습니다.
이 기능은 공유 책임 모델을 사용합니다.
Snowflake의 역할: Snowflake는 기본적으로 대상 테이블과 로드 기록(수집 상태)을 보조 계정에 복제합니다. 장애 조치 중에 Snowflake는 이 상태를 사용하여 중복을 방지하고 기본 위치에서 처리되지 않은 파일만 수집합니다.
사용자의 역할: 중단이 발생하는 경우(또는 이중 쓰기 클라우드 설정의 일부로) 수신되는 새 파일을 보조 클라우드 저장소 위치로 라우팅해야 합니다. Snowflake는 외부 클라우드 저장소 파일을 복제하지 않습니다.
파이프라인 복원력은 최대 2개의 주요 리소스를 구성하여 구동됩니다.
다중 위치 저장소 통합(MLSI): 리전 또는 클라우드 전반에 걸쳐 Snowflake를 여러 외부 클라우드 저장소 위치에 안전하게 연결합니다. MLSI는 외부 스테이지에서만 또는 Snowpipe 파이프라인에 대한 COPY INTO의 복원력을 원하는 경우에 필요합니다.
다중 큐 알림 통합(MQNI): Snowflake를 여러 서드 파티 클라우드 메시지 큐에 연결하여 새 파일 알림을 지속적으로 수신할 수 있도록 합니다. MQNI는 Snowpipe 파이프라인, 즉 연속 데이터 로딩을 위한 복원력을 원하는 경우에만 필요합니다.
요구 사항 및 고려 사항¶
이 기능을 구성하기 전에 다음 전제 조건 및 고려 사항을 검토합니다.
요구 사항¶
에디션: Snowflake Business Critical Edition 이상.
지원되는 수집 방법: 이 기능은 Snowpipe(자동 수집) 및 COPY INTO <table>을 통한 파일 기반 데이터 로딩만 지원합니다. Openflow 또는 Snowpipe Streaming은 지원하지 않습니다.
동일한 경로 구조: 장애 조치 후 파이프라인이 새 파일을 찾을 수 있도록 하려면 기본 위치와 정확히 동일한 계층 구조, 폴더 구조, 상대 경로를 사용하여 보조 저장소 위치에 파일을 작성해야 합니다.
고려 사항¶
청구: 이 기능을 사용하면 표준 복제 요금(데이터 전송 및 컴퓨팅 리소스)이 발생하며 대상 계정으로 청구됩니다.
스테이지 수정 다운타임: 기존 스테이지의 RELATIVE_URL 속성을 변경하면 종속 오브젝트가 무효화되고 수집이 중지됩니다. 다운타임을 방지하려면 설정 중에 새 스테이지를 생성하는 것이 좋습니다.
다중 큐 알림 통합(MQNI): 소스 계정과 대상 계정 모두에서 동일한 활성 큐 사용은 지원되지 않습니다. 동일한 활성 큐를 사용하는 경우 알림이 손실될 수 있습니다. Snowflake는 여러 계정에서 동일한 큐가 사용 중인지 여부를 확인하지 않습니다.
디렉터리 테이블: MLSI를 사용하여 스테이지에 디렉터리 테이블 생성은 현재 지원되지 않습니다.
복제 동작¶
비동기 복제: Snowflake는 정확히 동일한 스냅샷에서 테이블과 파이프라인의 로드 기록을 함께 복제합니다. 이는 동기화되므로 중단이 발생해도 데이터가 중복되지 않습니다. 보조 데이터베이스가 4시간 뒤처진 경우 테이블 데이터도 4시간 뒤처지며, 4시간 동안 큐에 대기 중인 알림을 처리하면 테이블이 최신 상태로 업데이트됩니다.
이중 쓰기 데이터 손실 방지: 복구 시점 목표(RPO)는 복제 새로 고침 간격에 따라 결정됩니다. 장애 조치 중 데이터 손실을 방지하려면 보조 클라우드 메시지 큐의 메시지 보존 기간이 복제 간격보다 길어야 합니다. 예약된 복제가 이를 따라잡기 전에 큐에서 메시지를 삭제하면 장애 조치 시 해당 파일이 수집되지 않습니다.
단일 쓰기 데이터 손실 위험: 단일 쓰기 라우팅을 사용하는 경우 마지막으로 복제에 성공한 후 기본 위치에서 처리된 모든 파일은 보조 위치에서 전혀 인식되지 않습니다. 장애 조치 시 이 데이터는 대상 계정에서 일시적으로 누락됩니다.
경고
단일 쓰기 장애 복구에 대한 중요한 경고: 원래 기본 계정으로 장애 복구하기 위해 새로 고침을 실행하면 보조 데이터베이스가 기본 데이터베이스를 덮어씁니다. 다시 동기화하기 전에 분리된 파일을 수동으로 조정하고 보조 데이터베이스에 로드하지 않으면 기본 데이터베이스에서 영구적으로 삭제됩니다.
올바른 아키텍처 선택하기¶
Snowflake는 동일한 스냅샷에서 대상 테이블과 파이프라인의 로드 기록을 비동기적으로 복제하므로 데이터 중복 및 부분 로드로부터 파이프라인이 보호됩니다. 수집 중에 중단이 발생하면 부분적으로 로드된 파일이 없도록 트랜잭션이 완전히 롤백됩니다.
그러나 중단 중에 “전송 중인” 파일을 복구하는 방법은 전적으로 외부 클라우드 저장소 라우팅이 이중 쓰기 라우팅으로 구성되었는지 또는 단일 쓰기 라우팅으로 구성되었는지 여부에 따라 다릅니다.
1. 이중 쓰기 - 권장¶
생산자 애플리케이션은 기본 및 보조 클라우드 저장소 버킷에 동시에 파일을 작성합니다. 보조 메시지 큐는 알림을 누적하지만, 보조 데이터베이스는 읽기 전용이므로 Snowflake는 알림을 처리하지 않습니다.
장애 조치 시 발생하는 결과: 보조 데이터베이스가 쓰기 가능 상태가 됩니다. Snowpipe는 보조 큐를 읽고 복제된 로드 기록을 사용하여 파일 중복을 제거합니다. 중단으로 인해 파일이 기본 위치에서 완료되지 못한 경우 보조 파이프라인은 보조 큐에서 알림을 읽으며 로드 기록에서 누락된 파일을 확인하고 수집합니다.
장애 복구 시의 결과: 기본 위치가 복구되고 장애 조치 그룹을 새로 고친 다음, 장애 복구하면 장애 복구 준비 중에 보조 계정에서 로드 기록이 동기화되었으므로 Snowpipe가 자동으로 새 파일 수집을 시작합니다.
결과: 누락된 데이터나 중복이 없습니다. Snowflake는 양방향에서 자동으로 조정을 처리합니다.
필요한 조치: 표준 장애 복구 전 복제 동기화(ALTER FAILOVER GROUP … REFRESH)를 사용하여 기본 계정에 최신 로드 기록이 있는지 확인하는 작업 외에는 없습니다.
2. 단일 쓰기 라우팅¶
생산자는 기본 클라우드 저장소에만 파일을 작성합니다. 중단이 발생하면 생산자를 다시 라우팅하여 보조 클라우드 저장소에 새 파일을 쓰기 시작합니다.
장애 조치 시 발생하는 결과: 보조 계정은 보조 버킷으로 라우팅된 새 파일을 즉시 처리하기 시작합니다. 그러나 영향을 받는 기본 위치에 갇힌 모든 진행 중인 파일은 일시적으로 남겨집니다.
장애 복구 시의 결과: 기본 위치가 복구되고 기본 Snowflake 계정으로 장애 복구되면 Snowpipe는 중단 전에 큐에 성공적으로 도달한 모든 파일 알림을 자동으로 처리합니다.
결과: 중복이 없습니다. 그러나 중단으로 인해 클라우드 알림이 완전히 생성되지 않은 파일(또는 중단이 큐의 메시지 보존 정책보다 오래 지속된 파일)에는 수동 개입이 필요합니다.
필요한 조치: 장애 복구 후 기본 저장소 버킷을 Snowflake의 COPY_HISTORY 뷰와 비교하여 누락된 파일을 식별합니다. ALTER PIPE … REFRESH 또는 수동 COPY INTO 명령을 실행하여 갇힌 특정 파일을 로드합니다.
파트 1: 일회성 구성(설정)¶
다음 단계는 복원력 있는 데이터 파이프라인을 구성하기 위해 한 번 수행됩니다. 설정 중에 두 계정의 활성 위치를 구성하므로 실제 중단 중 장애 조치는 거의 즉각적으로 이루어집니다.
1단계: 다중 위치 저장소 통합(MLSI) 생성¶
다중 위치 저장소 통합을 구성하려면 이 섹션에 언급된 몇 가지 차이점과 함께 저장소 통합을 구성하는 표준 단계를 따릅니다.
소스 계정에서 STORAGE_LOCATIONS 목록의 각 위치에 대한 값을 제공하여 MLSI를 생성합니다. 클라우드 간 설정을 위해 클라우드 공급자를 혼합하고 일치시킬 수 있습니다.
여기서
STORAGE_LOCATIONS: 저장소 통합을 위해 하나 이상의 저장소 위치 목록을 지정합니다(S3 버킷, GCS 버킷 또는 Azure 컨테이너). 각 클라우드 공급자의 매개 변수를 보려면 CREATE STORAGE INTEGRATION 참조 페이지의 :ref:`클라우드 공급자 매개 변수(cloudProviderParams) <label-create_integration_storage_cloudProviderParams>`를 참조하세요.
NAME: 저장소 위치의 식별자(이름)를 지정하는 문자열입니다.
ENCRYPTION: 저장소 위치에 대한 암호화를 지정합니다. 스테이지 수준이 아닌 저장소 통합 수준에서 저장소 위치에 대한 암호화를 지정해야 합니다. 암호화된 파일에서 로딩하는 경우에만 필요하며, 저장소 위치와 파일이 암호화되지 않은 경우에는 필요하지 않습니다. 각 클라우드 공급자의 암호화 옵션을 보려면 CREATE STAGE 참조 페이지의 ENCRYPTION 섹션을 참조하세요.
ACTIVE: 현재 계정에서 저장소 통합의 활성 위치로 설정할 저장소 위치의 이름을 지정합니다.
소스 계정의 활성 저장소 위치에 대해 액세스 제어를 설정하고 저장소에 액세스할 수 있는 권한을 Snowflake에 부여해야 합니다. 다음 항목의 지침을 따릅니다.
2단계: 외부 스테이지와 MLSI 연결¶
기존 스테이지를 변경하는 대신 새 스테이지를 생성하는 것이 좋습니다.
경고
WARNING: RELATIVE_URL을 변경하면 다운타임 발생
ALTER STAGE를 사용하여 기존 스테이지의 RELATIVE_URL을 변경하는 경우 모든 종속 디렉터리 테이블이 다시 생성되고, 이 스테이지를 사용하는 모든 외부 테이블 또는 파이프가 유효하지 않은 것으로 표시되어 수집이 중지됩니다. 기존 스테이지를 변경하려는 경우 다운타임에 대비합니다.
CREATE STAGE 명령을 사용하여 생성한 다중 위치 저장소 통합을 하나 이상의 외부 스테이지와 연결합니다.
여기서
RELATIVE_URL: 저장소 통합에 정의된 저장소 위치에서 외부 스테이지 위치로의 상대 경로입니다. 장애 조치 후 파이프라인이 새 파일을 찾을 수 있도록 하려면 기본 위치와 동일한 계층 구조, 폴더 구조, 상대 경로를 사용하여 보조 저장소 위치에 파일을 작성해야 합니다.
참고
이 값은 리터럴 경로여야 합니다. 패턴 또는 와일드카드 지정은 지원되지 않습니다. 저장소 통합의 STORAGE_BASE_URL 아래의 모든 위치에 대한 액세스를 지정하려면 빈 문자열 RELATIVE_URL = ‘’를 사용합니다.
STORAGE_INTEGRATION: 다중 위치 저장소 통합의 이름입니다.
참고
또는 RELATIVE_URL 매개 변수 및 사용자 MLSI를 지정하여 기존 외부 스테이지를 변경할 수 있습니다. ALTER STAGE 명령은 외부 스테이지가 다중 위치 저장소 통합을 사용하지 않도록 이 변경 사항의 롤백도 지원합니다.
예:
3단계: 다중 큐 알림 통합(MQNI) 구성¶
클라우드 메시징을 통해 자동화된 데이터 로딩을 사용하고 외부 스테이지에 대해 다중 위치 저장소 통합을 구성한 경우, Snowpipe 파이프라인의 원활한 장애 조치를 위해 다중 큐 알림 통합도 사용해야 합니다.
알림 통합을 위해 정의하는 각 큐에 대해 다음 항목의 단계를 사용하여 메시징 서비스를 준비해야 합니다.
SQS 알림을 사용하여 Snowpipe 자동화를 위한 Amazon SNS 구성하기. MLSI에 저장소 위치가 있는 각 AWS 리전에 대한 SNS 항목을 생성합니다.
참고
Snowpipe에서 Amazon SNS를 사용하지 않으려면 MQNI 생성을 피할 수 있지만, 장애 조치 중에 추가 단계를 수행해야 합니다. 이 옵션을 선택하는 경우 파이프를 위에서 생성한 스테이지 및 MLSI에 연결한 후 4단계로 진행합니다.
시나리오 A: 새 다중 큐 알림 통합(MQNI) 생성¶
다중 큐 알림 통합을 생성하려면 이 섹션에 설명된 몇 가지 차이점과 함께 알림 통합 생성을 위한 표준 단계를 따릅니다.
소스 계정에서 QUEUES 목록의 각 큐에 대한 값을 제공하여 다중 큐 알림 통합을 생성합니다.
여기서
TYPE = MULTI_QUEUE: 이는 Snowflake와 서드 파티 클라우드 메시지 큐 서비스 간의 다중 큐 통합임을 지정합니다.
DIRECTION = INBOUND: 클라우드 메시징 서비스에서 보낸 알림을 Snowflake가 수신하도록 지정합니다.
QUEUES: 알림 통합을 위한 하나 이상의 큐 목록을 지정합니다.
NAME: 큐의 식별자(이름)를 지정하는 문자열입니다.
각 클라우드 공급자에 대한 특정 큐 매개 변수를 보려면 다음을 참조하세요.
AWS:
NOTIFICATION_PROVIDER = AWS_SNS: Amazon Simple Notification Service(SNS)를 서드 파티 클라우드 메시지 큐 서비스로 지정합니다.
AWS_SNS_TOPIC_ARN: 알림이 푸시되는 Amazon SNS 항목의 Amazon 리소스 이름(ARN)입니다.
Google Cloud: CREATE NOTIFICATION INTEGRATION(Google Pub 및 Sub 항목에서 인바운드)
Azure: :doc:` CREATE NOTIFICATIONINTEGRATION(Azure Event Grid 항목에서 인바운드) </sql-reference/sql/create-notification-integration-queue-inbound-azure>`
ACTIVE : 현재 계정에서 알림 통합을 위한 활성 큐로 설정할 큐의 이름을 지정합니다.
소스 계정의 활성 큐에 대해 메시징 서비스에 액세스할 수 있는 권한을 Snowflake에 부여해야 합니다. 클라우드 공급자의 지침을 따릅니다.
MQNI를 생성한 후 이를 사용하여 CREATE PIPE 명령으로 새 파이프를 생성할 수 있습니다. 다음 예제에서는 다중 위치 저장소 통합에 의존하는 외부 스테이지(my_ext_stage)를 사용하여 Amazon S3에서 테이블로 데이터를 로드하는 파이프를 생성합니다.
시나리오 B: 기존 알림 통합을 MQNI로 마이그레이션¶
기존 알림 통합을 처음부터 새로 생성하는 대신 MQNI로 변환하려는 경우 SYSTEM$CONVERT_PIPES_TO_MULTI_QUEUE 함수를 사용합니다.
이 함수는 지정한 이름을 사용하여 새로운 다중 큐 알림 통합을 생성하고, 소스 계정의 활성 큐를 원래 큐로 설정하고, 새 MQNI를 사용하도록 소스 계정의 모든 파이프를 자동으로 마이그레이션합니다.
구문:
여기서
new_mqni_name: 함수가 생성하는 새로운 다중 큐 알림 통합에 할당할 식별자(이름)를 지정하는 문자열입니다.
original_sns_topic_arn_or_int_name:
AWS의 경우 하나 이상의 파이프와 연결된 원래 SNS 항목의 Amazon 리소스 이름(ARN)입니다.
Google Cloud 또는 Azure의 경우 하나 이상의 파이프와 연결된 원래 단일 큐 알림 통합의 식별자를 지정하는 문자열입니다.
new_sns_topic_arn_or_int_name:
AWS의 경우 MQNI에 큐로 추가할 새 SNS 항목의 Amazon 리소스 이름(ARN)입니다.
Google Cloud 또는 Azure의 경우 원래 알림 통합과 결합할 새 단일 큐 알림 통합의 식별자를 지정하는 문자열입니다.
예 1: 새 SNS 항목 큐 추가
그 결과 다음 큐가 있는 my_mqni라는 MQNI가 생성됩니다.
MY_MQNI-queue1(원래 활성 SNS 항목의 경우)
MY_MQNI-queue2(새 SNS 항목의 경우)
예 2: 두 개의 알림 통합을 MQNI로 결합
그 결과 다음 큐가 있는 my_azure_mqni라는 MQNI가 생성됩니다.
my_azure_ni_1(원래 활성 큐의 경우)
my_azure_ni_2(새 큐의 경우)
참고
소스 계정에서 활성 큐를 변경하려는 경우 ALTER INTEGRATION … SET ACTIVE = ‘<my_queue>’ 문을 사용할 수 있습니다. 활성 큐를 업데이트하기 전에 알림 통합을 사용하는 모든 파이프를 일시 중지해야 합니다.
4단계: MLSI 및 MQNI를 대상 계정에 복제¶
참고
새로 고침 작업은 오브젝트에 전역 IDs가 있는 경우를 제외하고 복제본이 아닌 대상 계정의 모든 저장소 또는 알림 통합을 삭제합니다.
자세한 내용은 대상 계정의 복제와 오브젝트 섹션을 참조하십시오.
1. To replicate your multi-location storage integration and multi-queue notification integration, alter your existing replication or failover group to include STORAGE INTEGRATIONS and NOTIFICATION INTEGRATIONS in the ALLOWED_INTEGRATION_TYPES list.
예를 들어, ALTER FAILOVER GROUP 명령을 사용합니다.
그런 다음 대상 계정에서 새로 고침 작업을 수행합니다.
5단계: 대상 계정에서 활성 상태 구성¶
새로 고침 작업을 수행한 후 실제 중단 중에 원활한 장애 조치를 보장하려면 대상 계정에서 활성 저장소 위치와 큐(알림 통합을 사용하는 경우)를 구성합니다.
대상 계정에서:
대상 계정에서 활성 위치로 설정하려는 저장소 위치에 대해 다음 항목의 지침을 사용하여 Snowflake에 저장소에 대한 액세스 권한을 부여합니다.
보조 저장소 활성화: MLSI를 설정하여 대상 계정에서 보조 백업 저장소 위치를 사용합니다.
다중 큐 알림 통합을 사용하는 경우 대상 계정에서 활성으로 설정할 큐에 대한 메시징 서비스에 액세스할 수 있는 권한을 Snowflake에 부여합니다. 클라우드 공급자의 지침을 따릅니다.
보조 큐 활성화(MQNI를 사용하는 경우): 활성 큐를 대상 계정의 보조 위치로 설정합니다.
파트 2: 장애 조치 단계¶
중단 중에 다음 단계를 실행하여 데이터 수집을 보조 위치로 리디렉션합니다. 활성 큐와 저장소는 설정에서 미리 구성되었으므로 이 프로세스에는 최소한의 명령이 필요합니다.
대상 계정을 승격합니다. 대상 계정에 로그인하고 새 기본 계정으로 사용하도록 승격합니다. 보조 클라우드 인프라에서 데이터 로딩이 자동으로 재개됩니다.
Snowpipe에서 Amazon SNS를 사용하지 않는 경우: Snowpipe에서 SNS를 사용하지 않고 SQS에만 의존하는 경우 MQNI를 생성할 필요가 없습니다. 대신, 장애 조치 중에 파이프를 리바인딩하려면 다음 시스템 함수를 호출합니다.
파트 3: 장애 복구 단계¶
중단이 해결되고 기본 위치가 정상이면 다음 단계를 실행하여 파이프라인을 기본 위치로 다시 이동합니다.
데이터를 다시 동기화: 원래 계정을 승격하기 전에 중단 중에 발생한 모든 데이터와 상태 변경 사항을 원래 계정으로 다시 가져와야 합니다. 원래 기본 계정(현재 보조 계정 역할을 함)에 로그인하고 수동 새로 고침을 시작합니다.
중요
다음 단계로 이동하기 전에 이 새로 고침 작업이 완전히 완료될 때까지 기다립니다. 동기화가 완료되기 전에 장애 조치를 수행하면 데이터가 손실될 수 있습니다.
경고
단일 쓰기 장애 복구에 대한 중요한 경고: 단일 쓰기 라우팅을 사용하는 경우 마지막으로 복제에 성공한 후 기본 위치에서 처리된 모든 파일은 보조 위치에서 인식되지 않습니다. 장애 조치 시 이 데이터는 대상 계정에서 일시적으로 누락됩니다. 원래 기본 계정으로 장애 복구하기 위해 새로 고침을 실행하면 보조 데이터베이스가 기본 데이터베이스를 덮어씁니다. 다시 동기화하기 전에 분리된 파일을 수동으로 조정하고 보조 데이터베이스에 로드하지 않으면 기본 데이터베이스에서 영구적으로 삭제됩니다.
원래 계정을 승격합니다. 새로 고침이 완료되면 원래 소스 계정을 다시 기본 계정으로 승격합니다.
Snowpipe에서 Amazon SNS를 사용하지 않는 경우: 시스템 함수를 호출하여 파이프를 원래 소스 위치로 다시 리바인딩합니다.
파트 4: 모니터링 및 유효성 검사¶
장애 조치 또는 장애 복구를 시작한 후 다음 명령을 사용하여 데이터 파이프라인이 성공적으로 리디렉션되고 수집을 재개했는지 확인합니다.
1. 활성 통합 상태 확인¶
속성을 확인하여 통합이 올바른 저장소 및 큐를 가리키고 있는지 확인합니다. 출력의 ACTIVE 속성을 찾습니다.
2. 파이프 상태 확인(Snowpipe만 해당)¶
SYSTEM$PIPE_STATUS 함수를 사용하여 파이프가 실행 중인지 확인하고 파이프가 보조 위치의 새 파일을 적극적으로 큐에 넣고 있는지 확인합니다.
“executionState”:”RUNNING”을 찾고 “pendingFileCount”를 확인하여 보조 버킷에 삭제된 새 파일을 적극적으로 인식하고 있는지 확인합니다.
3. 성공적인 수집 검증(로드 기록)¶
데이터가 오류나 중복 없이 로드되도록 보장하려면 COPY_HISTORY 뷰를 쿼리합니다. 이는 수집된 파일, 해당 소스 경로, 로드된 시간을 정확히 보여줍니다.
file_name 경로가 활성 저장소 위치를 반영하고 상태가 LOADED로 표시되는지 확인합니다.