Azure Blob 저장소에 대해 자동으로 디렉터리 테이블 새로 고치기¶
이 항목에서는 Azure 컨테이너에 대한 Microsoft Azure Event Grid 알림을 사용하여 디렉터리 테이블을 생성하고 디렉터리 테이블 메타데이터를 자동으로 새로 고치는 지침을 제공합니다. 이 작업은 외부 스테이지 및 경로에 있는 최신 관련 파일 세트과 메타데이터를 동기화합니다. 즉,
경로의 새 파일이 테이블 메타데이터에 추가됩니다.
경로의 파일에 대한 변경 사항은 테이블 메타데이터에서 업데이트됩니다.
경로에 더 이상 없는 파일은 테이블 메타데이터에서 제거됩니다.
Snowflake가 지원하는 Blob 저장소 계정 타입은 다음과 같습니다.
Blob 저장소
Data Lake Storage Gen2
범용 v2
Microsoft.Storage.BlobCreated
및 Microsoft.Storage.BlobDeleted
이벤트만 디렉터리 테이블에 대한 새로 고침을 트리거합니다. Blob 저장소에 새 오브젝트를 추가할 때 이러한 이벤트가 트리거됩니다. 디렉터리나 오브젝트의 이름을 바꾸는 경우에는 이러한 이벤트가 트리거되지 않습니다. 비용, 이벤트 노이즈, 지연 시간을 줄이기 위해 디렉터리 테이블에 대해 지원되는 이벤트만 보내는 것이 좋습니다.
Snowflake는 다음 Microsoft.Storage.BlobCreated
API를 지원합니다.
CopyBlob
PutBlob
PutBlockList
FlushWithClose
SftpCommit
Snowflake는 다음 Microsoft.Storage.BlobDeleted
API를 지원합니다.
DeleteBlob
DeleteFile
SftpRemove
Data Lake Storage Gen2 저장소 계정의 경우, 클라이언트가 CreateFile
및 FlushWithClose
작업을 사용할 때 Microsoft.Storage.BlobCreated
이벤트가 트리거됩니다. SSH 파일 전송 프로토콜(SFTP)을 사용하는 경우 Microsoft.Storage.BlobCreated
이벤트는 SftpCreate
및 SftpCommit
작업으로 트리거됩니다. CreateFile
또는 SftpCreate
API만으로는 저장소 계정에 있는 파일의 커밋을 나타내지 않습니다. FlushWithClose
또는 SftpCommit
메시지가 전송되지 않을 경우 Snowflake는 디렉터리 테이블을 새로 고치지 않습니다.
참고
이 항목에서 설명하는 작업을 수행하려면 스키마에 대해 CREATE STAGE 권한이 있는 역할을 사용해야 합니다.
또한 Microsoft Azure에 대한 관리 액세스 권한이 있어야 합니다. Azure 관리자가 아닌 경우 Azure 관리자에게 1단계: Event Grid 구독 구성하기 의 단계를 완료하도록 요청하십시오.
이 항목의 내용:
클라우드 플랫폼 지원¶
Azure Event Grid 메시지를 사용하여 자동화된 외부 메타데이터 새로 고침을 트리거하는 것은 다음 클라우드 플랫폼 에서 호스팅되는 Snowflake 계정에서 지원됩니다.
Amazon Web Services(AWS)
Microsoft Azure
이 지원을 구성하기 위한 지침은 두 클라우드 호스팅 플랫폼의 계정에 대해 동일합니다.
클라우드 저장소에 대한 보안 액세스 구성하기¶
참고
데이터 파일을 저장하는 Azure Blob 저장소 컨테이너에 대한 보안 액세스를 이미 구성한 경우에는 이 섹션을 건너뛸 수 있습니다.
이 섹션에서는 Snowflake ID 및 액세스 관리(IAM) 엔터티에 클라우드 저장소에 대한 인증 책임을 위임하도록 Snowflake 저장소 통합 오브젝트를 구성하는 방법을 설명합니다.
참고
클라우드 저장소에 액세스할 때 IAM 자격 증명을 제공할 필요가 없으므로 이 옵션을 사용하는 것이 매우 좋습니다. 추가적인 저장소 액세스 옵션은 데이터를 로드하기 위해 Azure 컨테이너 구성하기 을 참조하십시오.
이 섹션에서는 Snowflake가 외부(Azure) 스테이지에서 참조하는 Azure 컨테이너에서 데이터를 읽고 쓸 수 있도록 저장소 통합을 사용하는 방법을 설명합니다. 통합은 시크릿 키 또는 액세스 토큰과 같은 명시적 클라우드 공급자 자격 증명을 전달할 필요가 없는 명명된 일급 Snowflake 오브젝트입니다. 통합 오브젝트는 앱 등록 이라고 하는 Azure ID 및 액세스 관리(IAM) 사용자 ID를 저장합니다. 조직의 관리자는 Azure 계정에서 이 앱에 필요한 권한을 부여합니다.
또한, 통합은 통합을 사용하는 외부 스테이지를 생성할 때 사용자가 지정할 수 있는 위치를 제한하는 컨테이너(및 선택적 경로)를 지정해야 합니다.
참고
이 섹션의 지침을 완료하려면 Azure에서 저장소 계정을 관리할 수 있는 권한이 필요합니다. Azure 관리자가 아닌 경우 Azure 관리자에게 이러한 작업을 수행하도록 요청하십시오.
이 섹션의 내용:
1단계: Snowflake에서 클라우드 저장소 통합 만들기¶
CREATE STORAGE INTEGRATION 명령을 사용하여 저장소 통합을 생성합니다. 저장소 통합은 허용되거나 차단된 저장소 위치(즉, 컨테이너)의 선택적 세트과 함께 Azure 클라우드 저장소에 대해 생성된 서비스 주체를 저장하는 Snowflake 오브젝트입니다. 조직의 클라우드 공급자 관리자는 생성된 서비스 주체에게 저장소 위치에 대한 권한을 부여합니다. 이 옵션을 사용하면 사용자가 스테이지를 생성하거나 데이터를 로드할 때 자격 증명을 제공하지 않아도 됩니다.
단일 저장소 통합은 여러 외부(즉, Azure) 스테이지를 지원할 수 있습니다. 스테이지 정의의 URL은 STORAGE_ALLOWED_LOCATIONS 매개 변수에 대해 지정된 Azure 컨테이너(및 선택적 경로)와 일치해야 합니다.
참고
계정 관리자(ACCOUNTADMIN 역할의 사용자) 또는 전역 CREATE INTEGRATION 권한이 있는 역할만 이 SQL 명령을 실행할 수 있습니다.
CREATE STORAGE INTEGRATION <integration_name>
TYPE = EXTERNAL_STAGE
STORAGE_PROVIDER = 'AZURE'
ENABLED = TRUE
AZURE_TENANT_ID = '<tenant_id>'
STORAGE_ALLOWED_LOCATIONS = ('azure://<account>.blob.core.windows.net/<container>/<path>/', 'azure://<account>.blob.core.windows.net/<container>/<path>/')
[ STORAGE_BLOCKED_LOCATIONS = ('azure://<account>.blob.core.windows.net/<container>/<path>/', 'azure://<account>.blob.core.windows.net/<container>/<path>/') ]
여기서
integration_name
은 새 통합의 이름입니다.tenant_id
는 허용 및 차단된 저장소 계정이 속한 Office 365 테넌트의 ID입니다. 저장소 통합은 하나의 tenant에만 인증할 수 있으므로, 허용 및 차단된 저장소 위치는 모두 이 tenant에 속하는 저장소 계정을 참조해야 합니다.Tenant ID를 찾으려면 Azure 포털에 로그인하여 Azure Active Directory » Properties 를 클릭하십시오. tenant ID는 Tenant ID 필드에 표시됩니다.
container
는 데이터 파일을 저장하는 Azure 컨테이너의 이름입니다(예:mycontainer
). STORAGE_ALLOWED_LOCATIONS 및 STORAGE_BLOCKED_LOCATIONS 매개 변수는 이 통합을 참조하는 스테이지가 생성되거나 수정될 때 이러한 컨테이너에 대한 액세스를 각각 허용하거나 차단합니다.path
는 컨테이너의 논리적 디렉터리를 세부적으로 제어하기 위해 사용할 수 있는 선택적 경로입니다.
다음 예에서는 두 컨테이너 및 경로 중 하나를 참조하기 위해 통합을 사용하는 외부 스테이지를 명시적으로 제한하는 통합을 생성합니다. 이후 단계에서 이러한 컨테이너 및 경로 중 하나를 참조하는 외부 스테이지를 생성합니다. 이 통합을 사용하는 여러 외부 스테이지는 허용되는 컨테이너 및 경로를 참조할 수 있습니다.
CREATE STORAGE INTEGRATION azure_int TYPE = EXTERNAL_STAGE STORAGE_PROVIDER = 'AZURE' ENABLED = TRUE AZURE_TENANT_ID = 'a123b4c5-1234-123a-a12b-1a23b45678c9' STORAGE_ALLOWED_LOCATIONS = ('azure://myaccount.blob.core.windows.net/mycontainer1/mypath1/', 'azure://myaccount.blob.core.windows.net/mycontainer2/mypath2/') STORAGE_BLOCKED_LOCATIONS = ('azure://myaccount.blob.core.windows.net/mycontainer1/mypath1/sensitivedata/', 'azure://myaccount.blob.core.windows.net/mycontainer2/mypath2/sensitivedata/');
2단계: 저장소 위치에 Snowflake 액세스 권한 부여¶
DESCRIBE INTEGRATION 명령을 실행하여 동의 URL을 검색합니다.
DESC STORAGE INTEGRATION <integration_name>;
여기서
integration_name
은 1단계: Snowflake에서 클라우드 저장소 통합 만들기 에서 생성한 통합의 이름입니다.
다음 열의 값을 참고하십시오.
- AZURE_CONSENT_URL:
Microsoft 권한 요청 페이지에 대한 URL입니다.
- AZURE_MULTI_TENANT_APP_NAME:
계정에 대해 생성된 Snowflake 클라이언트 애플리케이션의 이름입니다. 이 섹션의 이후 단계에서는 허용되는 저장소 위치에 대한 액세스 토큰을 획득하기 위해 필요한 권한을 이 애플리케이션에 부여해야 합니다.
웹 브라우저에서 AZURE_CONSENT_URL 열의 URL로 이동합니다. 페이지에 Microsoft 권한 요청 페이지가 표시됩니다.
Accept 버튼을 클릭합니다. 이 작업을 통해 Snowflake 계정에 대해 생성된 Azure 서비스 주체에게 tenant 내부의 지정된 리소스에 대한 액세스 토큰이 부여됩니다. 액세스 토큰은 서비스 주체에 컨테이너에 대한 적절한 권한을 부여한 경우에만 획득이 가능합니다(다음 단계 참조).
Microsoft 권한 요청 페이지가 Snowflake 회사 사이트(snowflake.com)로 리디렉션됩니다.
Microsoft Azure 포털에 로그인합니다.
Azure Services » Storage Accounts 으로 이동합니다. Snowflake 서비스 주체 액세스 권한을 부여할 저장소 계정의 이름을 클릭합니다.
Access Control (IAM) » Add role assignment 를 클릭합니다.
Snowflake 서비스 주체에게 부여할 역할을 선택합니다.
Storage Blob Data Reader
는 읽기 액세스 권한만 부여합니다. 이를 통해 저장소 계정의 스테이징된 파일에서 데이터를 로드할 수 있습니다.Storage Blob Data Contributor
는 읽기 및 쓰기 권한을 부여합니다. 이를 통해 저장소 계정의 스테이징된 파일에서 데이터를 로드하거나 데이터를 언로드할 수 있습니다. 이 역할을 통해 REMOVE 명령을 실행하여 저장소 계정의 스테이징된 파일을 제거할 수도 있습니다.
Snowflake 서비스 포털 주체를 검색합니다. DESC STORAGE INTEGRATION 출력(1단계)에서 AZURE_MULTI_TENANT_APP_NAME 속성의 ID입니다. AZURE_MULTI_TENANT_APP_NAME 속성에서 밑줄 앞의 문자열을 검색합니다.
중요
Azure에서 이 섹션의 Microsoft 요청 페이지를 통해 요청한 Snowflake 서비스 주체를 생성하기 위해서는 1시간이 이상 걸릴 수 있습니다. 서비스 주체를 즉시 사용할 수 없는 경우 1~2시간 기다린 후 다시 검색하는 것이 좋습니다.
서비스 주체를 삭제하면 저장소 통합이 작동을 중지합니다.
Review + assign 버튼을 클릭합니다.
참고
Microsoft Azure 설명서에 따르면 역할 할당을 전파하기 위해서는 최대 5분이 걸릴 수 있습니다.
Snowflake는 어떤 기간 동안(60분의 만료 시간을 초과할 수는 없음) 임시 자격 증명을 캐시합니다. Snowflake에서 액세스를 취소하면 캐시가 만료될 때까지 사용자가 파일을 나열하고 클라우드 저장소 위치에서 데이터를 로딩할 수 있습니다.
Azure Event Grid를 사용한 자동화 구성하기¶
1단계: Event Grid 구독 구성하기¶
이 섹션에서는 Azure CLI를 사용하여 Azure 저장소 이벤트에 대한 Event Grid 구독을 설정하는 방법을 설명합니다. 이 섹션에 설명되는 단계에 대한 자세한 내용은 Azure 설명서에서 다음 문서를 참조하십시오.
https://docs.microsoft.com/en-us/azure/event-grid/custom-event-to-queue-storage
https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-event-quickstart
리소스 그룹 만들기¶
Event Grid 항목 은 소스(즉, Azure 저장소)가 이벤트를 전송하는 엔드포인트을 제공합니다. 항목은 관련 이벤트 컬렉션에서 사용됩니다. Event Grid 항목은 Azure 리소스이며 Azure 리소스 그룹에 배치해야 합니다.
다음 명령을 실행하여 리소스 그룹을 생성합니다.
az group create --name <resource_group_name> --location <location>
여기서
resource_group_name
은 새 리소스 그룹의 이름입니다.location
은 Azure 저장소 계정의 위치 또는 Snowflake 용어로 리전 입니다.
Event Grid 리소스 공급자 활성화¶
다음 명령을 실행하여 Event Grid 리소스 공급자를 등록합니다. 이 단계는 이전에 Azure 계정으로 Event Grid를 사용한 적이 없는 경우에만 필요합니다.
az provider register --namespace Microsoft.EventGrid
az provider show --namespace Microsoft.EventGrid --query "registrationState"
데이터 파일용 저장소 계정 만들기¶
다음 명령을 실행하여 데이터 파일을 저장할 저장소 계정을 생성합니다. 이 두 계정 유형만 이벤트 메시지를 지원하므로 이 계정은 반드시 Blob 저장소(즉, BlobStorage
타입) 또는 GPv2(즉, StorageV2
타입) 계정이어야 합니다.
참고
이미 Blob 저장소 또는 GPv2 계정이 있는 경우 해당 계정을 대신 사용할 수 있습니다.
예를 들어, Blob 저장소 계정을 생성합니다.
az storage account create --resource-group <resource_group_name> --name <storage_account_name> --sku Standard_LRS --location <location> --kind BlobStorage --access-tier Hot
여기서
resource_group_name
은 리소스 그룹 만들기 에서 생성한 리소스 그룹의 이름입니다.storage_account_name
은 새 저장소 계정의 이름입니다.location
은 Azure Storage 계정의 위치입니다.
저장소 큐용 저장소 계정 만들기¶
다음 명령을 실행하여 저장소 큐를 호스팅할 저장소 계정을 생성합니다. 이러한 종류의 계정만 저장소 큐에 대한 이벤트 메시지를 지원하므로 이 계정은 GPv2 계정이어야 합니다.
참고
이미 GPv2 계정이 있는 경우 해당 계정을 사용하여 데이터 파일과 저장소 큐를 모두 호스팅할 수 있습니다.
예를 들어, GPv2 계정을 생성합니다.
az storage account create --resource-group <resource_group_name> --name <storage_account_name> --sku Standard_LRS --location <location> --kind StorageV2
여기서
resource_group_name
은 리소스 그룹 만들기 에서 생성한 리소스 그룹의 이름입니다.storage_account_name
은 새 저장소 계정의 이름입니다.location
은 Azure Storage 계정의 위치입니다.
저장소 큐 만들기¶
단일 Azure Queue Storage 큐는 여러 Event Grid 구독과 관련한 이벤트 메시지를 수집할 수 있습니다. 최상의 성능을 위해 Snowflake는 Snowflake와 관련된 모든 구독을 수용할 단일 저장소 큐를 생성하는 것을 권장합니다.
다음 명령어를 실행하여 저장소 큐를 생성합니다. 저장소 큐는 메시지 세트를 저장하며, 이 경우 Event Grid의 이벤트 메시지는 다음과 같습니다.
az storage queue create --name <storage_queue_name> --account-name <storage_account_name>
여기서
storage_queue_name
은 새 저장소 큐의 이름입니다.storage_account_name
은 저장소 큐용 저장소 계정 만들기 에서 생성한 저장소 계정의 이름입니다.
참조용으로 저장소 계정 및 큐 IDs 내보내기¶
다음 명령을 실행하여 이 지침의 이후에 요청할 저장소 계정 및 큐 IDs에 대한 환경 변수를 설정합니다.
Linux 또는 macOS:
export storageid=$(az storage account show --name <data_storage_account_name> --resource-group <resource_group_name> --query id --output tsv) export queuestorageid=$(az storage account show --name <queue_storage_account_name> --resource-group <resource_group_name> --query id --output tsv) export queueid="$queuestorageid/queueservices/default/queues/<storage_queue_name>"
Windows:
set storageid=$(az storage account show --name <data_storage_account_name> --resource-group <resource_group_name> --query id --output tsv) set queuestorageid=$(az storage account show --name <queue_storage_account_name> --resource-group <resource_group_name> --query id --output tsv) set queueid="%queuestorageid%/queueservices/default/queues/<storage_queue_name>"
여기서
data_storage_account_name
은 데이터 파일용 저장소 계정 만들기 에서 생성한 저장소 계정의 이름입니다.queue_storage_account_name
은 저장소 큐용 저장소 계정 만들기 에서 생성한 저장소 계정의 이름입니다.resource_group_name
은 리소스 그룹 만들기 에서 생성한 리소스 그룹의 이름입니다.storage_queue_name
은 저장소 큐 만들기 에서 생성한 저장소 큐의 이름입니다.
Event Grid 확장 설치¶
다음 명령을 실행하여 Azure CLI용 Event Grid 확장을 설치합니다.
az extension add --name eventgrid
Event Grid 구독 만들기¶
다음 명령을 실행하여 Event Grid 구독을 생성합니다. 항목을 구독하면 추적할 이벤트에 대한 정보가 Event Grid에 제공됩니다.
Linux 또는 macOS:
az eventgrid event-subscription create \ --source-resource-id $storageid \ --name <subscription_name> --endpoint-type storagequeue \ --endpoint $queueid \ --advanced-filter data.api stringin CopyBlob PutBlob PutBlockList FlushWithClose SftpCommit DeleteBlob DeleteFile SftpRemove
Windows:
az eventgrid event-subscription create \ --source-resource-id %storageid% \ --name <subscription_name> --endpoint-type storagequeue \ --endpoint %queueid% \ -advanced-filter data.api stringin CopyBlob PutBlob PutBlockList FlushWithClose SftpCommit DeleteBlob DeleteFile SftpRemove
여기서
storageid
및queueid
는 참조용으로 저장소 계정 및 큐 IDs 내보내기 에서 설정한 저장소 계정 및 큐 ID 환경 변수입니다.subscription_name
은 새 Event Grid 구독의 이름입니다.
2단계: 알림 통합 만들기¶
알림 통합은 Snowflake와 Azure Event Grid와 같은 서드 파티 클라우드 메시지 큐 서비스 간의 인터페이스를 제공하는 Snowflake 오브젝트입니다.
참고
단일 알림 통합은 단일 Azure 저장소 큐를 지원합니다. 이벤트 알림은 알림 통합 사이에서 분할되므로 여러 알림 통합에서 동일한 저장소 큐를 참조하면 대상 테이블에서 데이터가 누락될 수 있습니다.
저장소 큐 URL 및 tenant ID 검색¶
Microsoft Azure 포털에 로그인합니다.
Storage account » Queue service » Queues 로 이동합니다. 나중에 참조할 수 있도록 저장소 큐 만들기 에서 생성한 큐의 URL을 기록합니다. URL의 형식은 다음과 같습니다.
https://<storage_account_name>.queue.core.windows.net/<storage_queue_name>
Azure Active Directory » Properties 으로 이동합니다. 나중에 참조할 수 있도록 Tenant ID 값을 기록합니다. ID 디렉터리 또는 tenant ID 는 Event Grid 구독에 대한 액세스 권한을 Snowflake에 부여하는 동의 URL을 생성하기 위해 필요합니다.
알림 통합 만들기¶
CREATE NOTIFICATION INTEGRATION 명령을 사용하여 알림 통합을 생성합니다.
참고
계정 관리자(ACCOUNTADMIN 역할의 사용자) 또는 전역 CREATE INTEGRATION 권한이 있는 역할만 이 SQL 명령을 실행할 수 있습니다.
알림 통합을 위한 Azure 서비스 주체는 저장소 통합을 위해 생성된 서비스 주체와 다릅니다.
CREATE NOTIFICATION INTEGRATION <integration_name>
ENABLED = true
TYPE = QUEUE
NOTIFICATION_PROVIDER = AZURE_STORAGE_QUEUE
AZURE_STORAGE_QUEUE_PRIMARY_URI = '<queue_URL>'
AZURE_TENANT_ID = '<directory_ID>';
여기서
integration_name
은 새 통합의 이름입니다.queue_URL
및directory_ID
는 저장소 큐 URL 및 tenant ID 검색 에서 기록한 큐 URL 및 tenant ID입니다.
예:
CREATE NOTIFICATION INTEGRATION my_notification_int
ENABLED = true
TYPE = QUEUE
NOTIFICATION_PROVIDER = AZURE_STORAGE_QUEUE
AZURE_STORAGE_QUEUE_PRIMARY_URI = 'https://myqueue.queue.core.windows.net/mystoragequeue'
AZURE_TENANT_ID = 'a123bcde-1234-5678-abc1-9abc12345678';
저장소 큐에 Snowflake 액세스 권한 부여¶
이 섹션의 특정 단계에서 Azure CLI를 로컬에 설치해야 합니다.
DESCRIBE INTEGRATION 명령을 실행하여 동의 URL을 검색합니다.
DESC NOTIFICATION INTEGRATION <integration_name>;
여기서
integration_name
은 알림 통합 만들기 에서 생성한 통합의 이름입니다.
다음 열의 값을 참고하십시오.
- AZURE_CONSENT_URL:
Microsoft 권한 요청 페이지에 대한 URL입니다.
- AZURE_MULTI_TENANT_APP_NAME:
계정에 대해 생성된 Snowflake 클라이언트 애플리케이션의 이름입니다. 이 섹션의 이후 단계에서는 허용되는 항목에 대한 액세스 토큰을 획득하기 위해 필요한 권한을 이 애플리케이션에 부여해야 합니다.
웹 브라우저에서 AZURE_CONSENT_URL 열의 URL로 이동합니다. 페이지에 Microsoft 권한 요청 페이지가 표시됩니다.
Accept 버튼을 클릭합니다. 이 작업을 통해 Snowflake 계정에 대해 생성된 Azure 서비스 주체에게 tenant 내부의 모든 리소스에 대한 액세스 토큰이 부여됩니다. 액세스 토큰은 서비스 주체에 컨테이너에 대한 적절한 권한을 부여한 경우에만 획득이 가능합니다(다음 단계 참조).
Microsoft 권한 요청 페이지가 Snowflake 회사 사이트(snowflake.com)로 리디렉션됩니다.
Microsoft Azure 포털에 로그인합니다.
Azure Active Directory » Enterprise applications 으로 이동합니다. 이 섹션의 2단계에서 기록한 Snowflake 애플리케이션 식별자가 나열되는지 확인합니다.
중요
나중에 Azure Active Directory에서 Snowflake 애플리케이션을 삭제하면 알림 통합의 작동이 중지됩니다.
Queues »
storage_queue_name
으로 이동합니다. 여기서storage_queue_name
은 저장소 큐 만들기 에서 생성한 저장소 큐의 이름입니다.Access Control (IAM) » Add role assignment 를 클릭합니다.
Snowflake 서비스 포털 주체를 검색합니다. DESC NOTIFICATION INTEGRATION 출력(1단계)에서 AZURE_MULTI_TENANT_APP_NAME 속성의 ID입니다. AZURE_MULTI_TENANT_APP_NAME 속성에서 밑줄 앞의 문자열을 검색합니다.
중요
Azure에서 이 섹션의 Microsoft 요청 페이지를 통해 요청한 Snowflake 서비스 주체를 생성하기 위해서는 1시간이 이상 걸릴 수 있습니다. 서비스 주체를 즉시 사용할 수 없는 경우 1~2시간 기다린 후 다시 검색하는 것이 좋습니다.
서비스 주체를 삭제하면 알림 통합이 작동을 중지합니다.
Snowflake 앱에 다음 권한을 부여합니다.
Role: 저장소 큐 데이터 참가자
Assign access to: Azure AD 사용자, 그룹 또는 서비스 주체
Select:
appDisplayName
값.
이제 Snowflake 애플리케이션 식별자가 같은 대화 상자의 Storage Queue Data Contributor 아래에 나열되어야 합니다.
3단계: 포함된 디렉터리 테이블로 스테이지 만들기¶
CREATE STAGE 명령을 사용하여 Azure 컨테이너를 참조하는 외부 스테이지를 생성합니다. Snowflake는 스테이징된 데이터 파일을 디렉터리 테이블 메타데이터로 읽습니다. 아니면 기존 외부 스테이지를 사용할 수 있습니다.
참고
클라우드 저장소 위치에 대한 보안 액세스를 구성하려면 이 항목의 클라우드 저장소에 대한 보안 액세스 구성하기 를 참조하십시오.
CREATE STAGE 문에서 저장소 통합을 참조하려면 역할에 저장소 통합 오브젝트에 대한 USAGE 권한이 있어야 합니다.
-- External stage
CREATE [ OR REPLACE ] [ TEMPORARY ] STAGE [ IF NOT EXISTS ] <external_stage_name>
<cloud_storage_access_settings>
[ FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ formatTypeOptions ] } ) ]
[ directoryTable ]
[ COPY_OPTIONS = ( copyOptions ) ]
[ COMMENT = '<string_literal>' ]
여기서
directoryTable (for Microsoft Azure) ::= [ DIRECTORY = ( ENABLE = { TRUE | FALSE } [ AUTO_REFRESH = { TRUE | FALSE } ] [ NOTIFICATION_INTEGRATION = '<notification_integration_name>' ] ) ]
디렉터리 테이블 매개 변수(directoryTable
)¶
ENABLE = TRUE | FALSE
스테이지에 디렉터리 테이블을 추가할지 여부를 지정합니다. 값이 TRUE이면 디렉터리 테이블이 스테이지와 함께 생성됩니다.
기본값:
FALSE
AUTO_REFRESH = TRUE | FALSE
[ WITH ] LOCATION =
설정에 지정된 명명된 외부 스테이지에서 신규 또는 업데이트된 데이터 파일을 사용할 수 있을 때 Snowflake가 디렉터리 테이블 메타데이터의 자동 새로 고침 트리거를 활성화해야 할지 여부를 지정합니다.TRUE
Snowflake를 사용하면 디렉터리 테이블 메타데이터의 자동 새로 고침을 트리거할 수 있습니다.
FALSE
Snowflake를 사용하여 디렉터리 테이블 메타데이터의 자동 새로 고침을 트리거할 수 없습니다. 메타데이터를 스테이지 경로의 현재 파일 목록과 동기화하려면 ALTER STAGE … REFRESH를 사용하여 디렉터리 테이블 메타데이터를 주기적으로 수동으로 새로 고쳐야 합니다.
기본값:
FALSE
Microsoft Azure
NOTIFICATION_INTEGRATION = '<알림_통합_이름>'
Azure Event Grid 알림을 사용하여 디렉터리 테이블 메타데이터를 자동으로 새로 고치기 위해 사용되는 알림 통합의 이름을 지정합니다. 알림 통합은 Snowflake와 서드 파티 클라우드 메시지 큐 서비스 간의 인터페이스를 제공하는 Snowflake 오브젝트입니다.
다음 예에서는 사용자 세션에 대한 활성 스키마에 이름이 mystage
인 스테이지를 생성합니다. 클라우드 저장소 URL에는 files
경로가 포함됩니다. 스테이지는 my_storage_int
저장소 통합을 참조합니다.
USE SCHEMA mydb.public;
CREATE STAGE mystage
URL='azure://myaccount.blob.core.windows.net/load/files/'
STORAGE_INTEGRATION = my_storage_int
DIRECTORY = (
ENABLE = true
AUTO_REFRESH = true
NOTIFICATION_INTEGRATION = 'MY_NOTIFICATION_INT'
);
참고
Data Lake Storage Gen2를 포함하여, 지원되는 모든 타입의 Azure blob 저장소 계정에 대해
blob.core.windows.net
엔드포인트를 사용합니다.URL 값에서 저장소 위치는 슬래시(
/
)로 끝나야 합니다.
NOTIFICATION_INTEGRATION 매개 변수는 2단계: 알림 통합 만들기 에서 생성한 my_notification_int
통합을 참조하십시오. 통합 이름은 모두 대문자로 입력해야 합니다.
새 데이터 파일 또는 업데이트된 데이터 파일이 클라우드 저장소 위치에 추가되면 이벤트 알림은 Snowflake에 이를 디렉터리 테이블 메타데이터로 스캔하도록 알립니다.
4단계: 디렉터리 테이블 메타데이터를 수동으로 새로 고치기¶
ALTER STAGE 명령을 사용하여 디렉터리 테이블의 메타데이터를 수동으로 새로 고칩니다.
구문¶
ALTER STAGE [ IF EXISTS ] <name> REFRESH [ SUBPATH = '<relative-path>' ]
여기서
REFRESH
디렉터리 테이블 정의에서 참조하는 스테이지 상태 데이터 파일에 액세스하고 테이블 메타데이터를 업데이트합니다.
경로의 새 파일이 테이블 메타데이터에 추가됩니다.
경로의 파일에 대한 변경 사항은 테이블 메타데이터에서 업데이트됩니다.
경로에 더 이상 없는 파일은 테이블 메타데이터에서 제거됩니다.
현재는 파일이 스테이지에 추가되거나 업데이트되거나 삭제될 때마다 이 명령을 실행해야 합니다. 이 단계에서는 디렉터리 테이블에 대한 스테이지 정의에서 최신 관련 파일 세트와 메타데이터를 동기화합니다.
SUBPATH = '<relative-path>'
선택적으로, 데이터 파일의 특정 서브세트에 대한 메타데이터를 새로 고칠 상대 경로를 지정합니다.
예¶
다음과 같이 mystage
로 명명된 스테이지에서 디렉터리 테이블 메타데이터를 수동으로 새로 고칩니다.
ALTER STAGE mystage REFRESH;
중요
디렉터리 테이블이 생성된 후 이 단계가 한 번 이상 성공적으로 완료되지 않으면 알림 이벤트가 디렉터리 테이블 메타데이터를 트리거하여 처음으로 자동으로 새로 고칠 때까지 디렉터리 테이블을 쿼리해도 결과가 반환되지 않습니다.
5단계: 보안 구성하기¶
디렉터리 테이블을 쿼리하는 데 사용할 각 추가 역할에 대해 GRANT <권한> 를 사용하여 다양한 오브젝트(즉, 데이터베이스, 스키마, 스테이지 및 테이블)에 대한 충분한 액세스 제어 권한을 부여합니다.
오브젝트 |
권한 |
참고 |
---|---|---|
데이터베이스 |
USAGE |
|
스키마 |
USAGE |
|
명명된 스테이지 |
USAGE , READ |
|
명명된 파일 형식 |
USAGE |
선택 사항으로, 생성한 스테이지가 명명된 파일 형식을 참조하는 경우에만 필요합니다. |