Azure Data Factory 또는 Azure Synapse Analytics를 사용하여 Snowflake에서 데이터 복사 및 변환
적용 대상: Azure Data Factory Azure Synapse Analytics
팁
기업용 올인원 분석 솔루션인 Microsoft Fabric의 Data Factory를 사용해 보세요. Microsoft Fabric은 데이터 이동부터 데이터 과학, 실시간 분석, 비즈니스 인텔리전스 및 보고에 이르기까지 모든 것을 다룹니다. 무료로 새 평가판을 시작하는 방법을 알아봅니다!
이 문서에서는 Azure Data Factory 및 Azure Synapse 파이프라인의 복사 작업을 사용하여 Snowflake 간에 데이터를 복사하고 Data Flow를 사용하여 Snowflake에서 데이터를 변환하는 방법을 설명합니다. 자세한 내용은 Data Factory 또는 Azure Synapse Analytics의 소개 문서를 참조하세요.
Important
새로운 Snowflake 커넥터는 개선된 네이티브 Snowflake 지원을 제공합니다. 솔루션에서 레거시 Snowflake 커넥터를 사용하는 경우 가장 빠른 편의를 위해 Snowflake 커넥터를 업그레이드하는 것이 좋습니다. 레거시 버전과 최신 버전의 차이점에 대한 자세한 내용은 이 섹션을 참조하세요.
지원되는 기능
이 Snowflake 커넥터는 다음 기능에 대해 지원됩니다.
지원되는 기능 | IR |
---|---|
복사 작업(원본/싱크) | (1) (2) |
매핑 데이터 흐름(원본/싱크) | (1) |
조회 작업 | (1) (2) |
스크립트 작업 | (1) (2) |
① Azure 통합 런타임 ② 자체 호스팅 통합 런타임
복사 작업의 경우 이 Snowflake 커넥터는 다음과 같은 기능을 지원합니다.
- COPY into [location] 명령을 활용하여 최상의 성능을 얻는 Snowflake의 데이터 복사.
- COPY into [table] 명령을 활용하여 최상의 성능을 얻는 Snowflake의 데이터 복사. Azure에서 Snowflake를 지원합니다.
- 자체 호스팅 Integration Runtime에서 Snowflake에 연결하는 데 프록시가 필요한 경우 Integration Runtime 호스트에서 HTTP_PROXY 및 HTTPS_PROXY에 대한 환경 변수를 구성해야 합니다.
필수 조건
데이터 저장소가 온-프레미스 네트워크, Azure 가상 네트워크 또는 Amazon Virtual Private Cloud 내에 있는 경우 자체 호스팅된 통합 런타임을 구성하여 연결해야 합니다. 자체 호스팅 통합 런타임에서 사용하는 IP 주소를 허용 목록에 추가해야 합니다.
데이터 저장소가 관리형 클라우드 데이터 서비스인 경우 Azure Integration Runtime을 사용할 수 있습니다. 액세스가 방화벽 규칙에서 승인된 IP로 제한되는 경우 허용 목록에 Azure Integration Runtime IP를 추가할 수 있습니다.
원본 또는 싱크에 사용되는 Snowflake 계정에는 데이터베이스에 필요한 USAGE
액세스 권한이 있어야 하며 스키마 및 그 아래의 테이블/뷰에 대한 읽기/쓰기 권한이 있어야 합니다. 또한 SAS URI를 사용하여 외부 단계를 만들 수 있도록 스키마에도 CREATE STAGE
가 있어야 합니다.
다음 계정 속성 값을 설정해야 합니다.
속성 | 설명 | 필수 항목 | 기본값 |
---|---|---|---|
REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_CREATION | 프라이빗 클라우드 스토리지 위치에 액세스하기 위해 명명된 외부 단계(CREATE STAGE 사용)를 만들 때 스토리지 통합 개체를 클라우드 자격 증명으로 요구할지 여부를 지정합니다. | FALSE | FALSE |
REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_OPERATION | 데이터를 로드할 때 스토리지 통합 개체를 클라우드 자격 증명으로 참조하는 명명된 외부 단계를 사용해야 하는지 아니면 프라이빗 클라우드 스토리지 위치로 데이터를 언로드할지를 지정합니다. | FALSE | FALSE |
Data Factory에서 지원하는 네트워크 보안 메커니즘 및 옵션에 대한 자세한 내용은 데이터 액세스 전략을 참조하세요.
시작하기
파이프라인에 복사 작업을 수행하려면 다음 도구 또는 SDK 중 하나를 사용하면 됩니다.
UI를 사용하여 Snowflake에 연결된 서비스 만들기
다음 단계를 사용하여 Azure Portal UI에서 Snowflake에 연결된 서비스를 만듭니다.
Azure Data Factory 또는 Synapse 작업 영역에서 관리 탭으로 이동하여 연결된 서비스를 선택하고 새로 만들기를 클릭합니다.
Snowflake를 검색하고 Snowflake 커넥터를 선택합니다.
서비스 세부 정보를 구성하고, 연결을 테스트하고, 새로운 연결된 서비스를 만듭니다.
커넥터 구성 세부 정보
다음 섹션에서는 Snowflake 커넥터에 국한된 엔터티를 정의하는 데 사용되는 속성에 대해 자세히 설명합니다.
연결된 서비스 속성
Snowflake 연결된 서비스에 대해 지원되는 일반 속성은 다음과 같습니다.
속성 | 설명 | 필수 |
---|---|---|
type | type 속성은 SnowflakeV2로 설정해야 합니다. | 예 |
accountIdentifier | 계정 및 해당 조직의 이름. 예를 들어 myorg-account123입니다. | 예 |
database | 연결 후 세션에 사용되는 기본 데이터베이스. | 예 |
warehouse | 연결 후 세션에 사용되는 기본 가상 웨어하우스. | 예 |
authenticationType | Snowflake 서비스에 연결하는 데 사용되는 인증 형식. 허용되는 값은 기본(기본값) 또는 KeyPair입니다. 추가 속성 및 예제를 보려면 아래 해당 섹션을 참조하세요. | 아니요 |
역할(role) | 연결 후 세션에 사용되는 기본 보안 역할. | 아니요 |
host | Snowflake 계정의 호스트 이름입니다. 예: contoso.snowflakecomputing.com .cn 은 지원됩니다. |
아니요 |
connectVia | 데이터 저장소에 연결하는 데 사용되는 통합 런타임입니다. Azure 통합 런타임 또는 자체 호스트 통합 런타임(데이터 저장소가 개인 네트워크에 있는 경우)을 사용할 수 있습니다. 지정하지 않으면 기본 Azure 통합 런타임을 사용합니다. | 아니요 |
이 Snowflake 커넥터는 다음 인증 형식을 지원합니다. 자세한 내용은 해당 섹션을 참조하세요.
인증 유형
기본 인증을 사용하려면 앞 섹션에서 설명한 일반 속성 외에 다음 속성을 지정합니다.
속성 | 설명 | 필수 |
---|---|---|
user | Snowflake 사용자의 로그인 이름. | 예 |
password | Snowflake 사용자의 암호. 이 필드를 SecureString 형식으로 표시하여 안전하게 저장합니다. Azure Key Vault에 저장된 비밀을 참조할 수도 있습니다. | 예 |
예제:
{
"name": "SnowflakeV2LinkedService",
"properties": {
"type": "SnowflakeV2",
"typeProperties": {
"accountIdentifier": "<accountIdentifier>",
"database": "<database>",
"warehouse": "<warehouse>",
"authenticationType": "Basic",
"user": "<username>",
"password": {
"type": "SecureString",
"value": "<password>"
},
"role": "<role>"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Azure Key Vault의 암호:
{
"name": "SnowflakeV2LinkedService",
"properties": {
"type": "SnowflakeV2",
"typeProperties": {
"accountIdentifier": "<accountIdentifier>",
"database": "<database>",
"warehouse": "<warehouse>",
"authenticationType": "Basic",
"user": "<username>",
"password": {
"type": "AzureKeyVaultSecret",
"store": {
"referenceName": "<Azure Key Vault linked service name>",
"type": "LinkedServiceReference"
},
"secretName": "<secretName>"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
참고 항목
매핑 데이터 흐름은 기본 인증만 지원합니다.
키 쌍 인증
키 쌍 인증을 사용하려면 키 쌍 인증 및 키 쌍 회전을 참조하여 Snowflake에서 키 쌍 인증 사용자를 구성하고 만들어야 합니다. 그런 다음, 연결된 서비스를 정의하는 데 사용하는 프라이빗 키와 암호(선택 사항)를 기록해 둡니다.
앞 섹션에서 설명한 일반 속성 외에 다음 속성을 지정합니다.
속성 | 설명 | 필수 |
---|---|---|
user | Snowflake 사용자의 로그인 이름. | 예 |
privateKey | 키 쌍 인증에 사용되는 프라이빗 키. Azure Data Factory로 보낼 때 프라이빗 키가 유효한지 확인하고 privateKey 파일에 줄 바꿈 문자(\n)가 포함되어 있음을 고려하려면 privateKey 콘텐츠의 형식을 문자열 리터럴 형식으로 올바르게 지정해야 합니다. 이 프로세스에는 각 줄에 명시적으로 \n을 추가하는 작업이 포함됩니다. |
예 |
privateKeyPassphrase | 암호화된 경우 프라이빗 키의 암호를 해독하는 데 사용되는 암호. | 아니요 |
예제:
{
"name": "SnowflakeV2LinkedService",
"properties": {
"type": "SnowflakeV2",
"typeProperties": {
"accountIdentifier": "<accountIdentifier>",
"database": "<database>",
"warehouse": "<warehouse>",
"authenticationType": "KeyPair",
"user": "<username>",
"privateKey": {
"type": "SecureString",
"value": "<privateKey>"
},
"privateKeyPassphrase": {
"type": "SecureString",
"value": "<privateKeyPassphrase>"
},
"role": "<role>"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
데이터 세트 속성
데이터 세트 정의에 사용할 수 있는 섹션 및 속성의 전체 목록은 데이터 세트 문서를 참조하세요.
Snowflake 데이터 세트에 대해 다음 속성이 지원됩니다.
속성 | 설명 | 필수 |
---|---|---|
type | 데이터 세트의 type 속성은 SnowflakeV2Table로 설정되어야 합니다. | 예 |
schema(스키마) | 스키마의 이름입니다. 스키마 이름은 대/소문자를 구분합니다. | 원본에는 아니요이고 싱크에는 예입니다. |
table | 테이블/뷰의 이름입니다. 테이블 이름은 대/소문자를 구분합니다. | 원본에는 아니요이고 싱크에는 예입니다. |
예제:
{
"name": "SnowflakeV2Dataset",
"properties": {
"type": "SnowflakeV2Table",
"typeProperties": {
"schema": "<Schema name for your Snowflake database>",
"table": "<Table name for your Snowflake database>"
},
"schema": [ < physical schema, optional, retrievable during authoring > ],
"linkedServiceName": {
"referenceName": "<name of linked service>",
"type": "LinkedServiceReference"
}
}
}
복사 작업 속성
작업 정의에 사용할 수 있는 섹션 및 속성의 전체 목록은 파이프라인 문서를 참조하세요. 이 섹션에서는 Snowflake 원본 및 싱크에서 지원하는 속성 목록을 제공합니다.
원본으로서의 Snowflake
Snowflake의 COPY into [location] 명령을 활용하여 최상의 성능을 얻는 Snowflake 커넥터.
싱크 데이터 저장소 및 형식이 Snowflake COPY 명령에 의해 기본적으로 지원되는 경우 복사 작업을 사용하여 Snowflake에서 싱크로 직접 복사할 수 있습니다. 자세한 내용은 Snowflake에서 직접 복사를 참조하세요. 그렇지 않으면 기본 제공되는 Snowflake에서 준비된 복사를 사용합니다.
Snowflake에서 데이터를 복사하기 위해 복사 작업 원본 섹션에서 지원되는 속성은 다음과 같습니다.
속성 | 설명 | 필수 |
---|---|---|
type | 복사 작업 원본의 type 속성을 SnowflakeV2Source로 설정해야 합니다. | 예 |
query | Snowflake에서 데이터를 읽을 SQL 쿼리를 지정합니다. 스키마 이름, 테이블 및 열에 소문자가 포함된 경우 쿼리의 개체 식별자(예: select * from "schema"."myTable" )를 인용합니다.저장 프로시저 실행은 지원되지 않습니다. |
아니요 |
exportSettings | Snowflake에서 데이터를 검색하는 데 사용되는 고급 설정입니다. 명령문이 호출될 때 서비스에서 전달하는 COPY into 명령에서 지원되는 항목을 구성할 수 있습니다. | 예 |
exportSettings 에서: |
||
type | SnowflakeExportCopyCommand로 설정된 내보내기 명령의 유형입니다. | 예 |
storageIntegration | Snowflake에서 만든 스토리지 통합의 이름을 지정합니다. 스토리지 통합을 사용하는 필수 구성 요소 단계는 Snowflake 스토리지 통합구성을 참조하세요. | 아니요 |
additionalCopyOptions | 키-값 쌍의 사전으로 제공되는 추가 복사 옵션입니다. 예: MAX_FILE_SIZE, 덮어쓰기. 자세한 내용은 Snowflake 복사 옵션을 참조하세요. | 아니요 |
additionalFormatOptions | 키-값 쌍의 사전으로 COPY 명령에 제공되는 추가 파일 형식 옵션입니다. 예: DATE_FORMAT, TIME_FORMAT, TIMESTAMP_FORMAT. 자세한 내용은 Snowflake 형식 유형 옵션을 참조하세요. | 아니요 |
참고 항목
다음 명령을 실행하고 INFORMATION_SCHEMA 스키마 및 COLUMNS 테이블에 액세스할 수 있는 권한이 있는지 확인합니다.
COPY INTO <location>
Snowflake에서 직접 복사
싱크 데이터 저장소와 형식이 이 섹션에 설명된 조건을 충족하는 경우 복사 작업을 사용하여 Snowflake에서 싱크로 직접 복사할 수 있습니다. 이 서비스는 설정을 확인하고 다음 조건이 충족되지 않으면 복사 작업 실행에 실패합니다.
원본에서
storageIntegration
을(를) 지정하는 경우:싱크 데이터 저장소는 Snowflake의 외부 단계에서 참조한 Azure Blob Storage입니다. 데이터를 복사하기 전에 다음 단계를 완료해야 합니다.
지원되는 인증 유형을 사용하여 싱크 Azure Blob Storage에 대한 Azure Blob Storage에 연결된 서비스를 만듭니다.
싱크 Azure Blob Storage 액세스 제어(IAM) Snowflake 서비스 주체에게 최소 Storage Blob 데이터 기여자 역할을 부여합니다.
원본에서
storageIntegration
을(를) 지정하지 않는 경우:싱크 연결된 서비스는 공유 액세스 서명 인증을 사용하는 Azure Blob Storage입니다. 다음 지원되는 형식으로 Azure Data Lake Storage Gen2에 데이터를 직접 복사하려는 경우 Snowflake 준비된 복사본을 사용하지 않도록 Azure Data Lake Storage Gen2 계정에 대해 SAS 인증을 사용하여 Azure Blob Storage 연결된 서비스를 만들 수 있습니다.
싱크 데이터 형식은 다음 구성과 함께 Parquet, 구분된 텍스트 또는 JSON입니다.
- Parquet 형식의 경우 압축 코덱은 None, Snappy 또는 Lzo입니다.
- 구분된 텍스트 형식의 경우:
rowDelimiter
는 \r\n 또는 모든 단일 문자입니다.compression
은 압축 안 함, gzip, bzip2 또는 deflate일 수 있습니다.encodingName
는 기본값으로 남아 있거나 utf-8로 설정됩니다.quoteChar
은 큰따옴표, 작은따옴표 또는 빈 문자열(따옴표 문자 없음)입니다.
- JSON 형식의 경우 직접 복사는 원본 Snowflake 테이블 또는 쿼리 결과에 단일 열만 있고 이 열의 데이터 유형이 VARIANT, OBJECT 또는 ARRAY인 경우에만 지원합니다.
compression
은 압축 안 함, gzip, bzip2 또는 deflate일 수 있습니다.encodingName
는 기본값으로 남아 있거나 utf-8로 설정됩니다.- 복사 작업 싱크의
filePattern
은 기본값으로 남아 있거나, setOfObjects로 설정됩니다.
복사 작업 원본에서
additionalColumns
는 지정되지 않았습니다.열 매핑은 지정되지 않았습니다.
예제:
"activities":[
{
"name": "CopyFromSnowflake",
"type": "Copy",
"inputs": [
{
"referenceName": "<Snowflake input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "SnowflakeV2Source",
"query": "SELECT * FROM MYTABLE",
"exportSettings": {
"type": "SnowflakeExportCopyCommand",
"additionalCopyOptions": {
"MAX_FILE_SIZE": "64000000",
"OVERWRITE": true
},
"additionalFormatOptions": {
"DATE_FORMAT": "'MM/DD/YYYY'"
},
"storageIntegration": "< Snowflake storage integration name >"
}
},
"sink": {
"type": "<sink type>"
}
}
}
]
Snowflake에서 준비된 복사
싱크 데이터 저장소 또는 형식이 Snowflake COPY 명령과 기본적으로 호환되지 않는 경우 마지막 섹션에 설명된 대로 중간 Azure Blob Storage 인스턴스를 사용하여 기본 제공된 준비된 복사를 사용하도록 설정합니다. 또한 단계적 복사 기능은 더 나은 처리량을 제공합니다. 이 서비스는 Snowflake에서 데이터를 스테이징 스토리지로 내보낸 다음, 데이터를 싱크에 복사하고 마지막으로 준비 스토리지에서 임시 데이터를 정리합니다. 스테이징을 사용하는 데이터 복사에 관한 자세한 내용은 준비된 복사를 참조하세요.
이 기능을 사용하려면 중간 스테이징으로 Azure Storage 계정을 참조하는 Azure Blob Storage 연결된 서비스를 만듭니다. 그런 다음, 복사 작업에서 enableStaging
및 stagingSettings
속성을 지정합니다.
원본에서
storageIntegration
을(를) 지정하는 경우 중간 준비 Azure Blob Storage는 Snowflake의 외부 단계에서 참조한 항목이어야 합니다. 지원되는 인증을 사용하여 Azure Blob Storage 연결된 서비스를 만들고 준비 Azure Blob Storage 액세스 제어(IAM) Snowflake 서비스 주체에 이상의 Storage Blob 데이터 기여자 역할을 부여해야 합니다.원본에서
storageIntegration
을(를) 지정하지 않으면 준비 Azure Blob Storage 연결된 서비스는 Snowflake COPY 명령에 필요한 대로 공유 액세스 서명 인증을 사용해야 합니다. 준비 Azure Blob Storage에서 Snowflake에 적절한 액세스 권한을 부여해야 합니다. 이에 대해 자세히 알아보려면 이 문서를 참조하세요.
예제:
"activities":[
{
"name": "CopyFromSnowflake",
"type": "Copy",
"inputs": [
{
"referenceName": "<Snowflake input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "SnowflakeV2Source",
"query": "SELECT * FROM MyTable",
"exportSettings": {
"type": "SnowflakeExportCopyCommand",
"storageIntegration": "< Snowflake storage integration name >"
}
},
"sink": {
"type": "<sink type>"
},
"enableStaging": true,
"stagingSettings": {
"linkedServiceName": {
"referenceName": "MyStagingBlob",
"type": "LinkedServiceReference"
},
"path": "mystagingpath"
}
}
}
]
Snowflake에서 단계적 복사를 수행할 때는 싱크 복사 동작을 파일 병합으로 설정해야 합니다. 이 설정을 사용하면 모든 분할된 파일이 올바르게 처리되고 병합되어 마지막으로 분할된 파일만 복사되는 문제가 방지됩니다.
구성 예
{
"type": "Copy",
"source": {
"type": "SnowflakeSource",
"query": "SELECT * FROM my_table"
},
"sink": {
"type": "AzureBlobStorage",
"copyBehavior": "MergeFiles"
}
}
참고 항목
싱크 복사 동작을 파일 병합으로 설정하지 못하면 마지막으로 분할된 파일만 복사될 수 있습니다.
Snowflake를 싱크로
Snowflake의 COPY into [table] 명령을 활용하여 최상의 성능을 얻는 Snowflake 커넥터. Azure의 Snowflake에 데이터를 쓰는 것을 지원합니다.
원본 데이터 저장소 및 형식이 Snowflake COPY 명령에 의해 기본적으로 지원되는 경우 복사 작업을 사용하여 원본에서 Snowflake로 직접 복사할 수 있습니다. 자세한 내용은 Snowflake로 직접 복사를 참조하세요. 그렇지 않은 경우 기본 제공되는 Snowflake로 준비된 복사를 사용합니다.
Snowflake로 데이터를 복사하기 위해 복사 작업 싱크 섹션에서 지원되는 속성은 다음과 같습니다.
속성 | 설명 | 필수 |
---|---|---|
type | 복사 작업 싱크의 type 속성은 SnowflakeV2Sink로 설정해야 합니다. | 예 |
preCopyScript | 각 실행 시 Snowflake에 데이터를 쓰기 전에 실행할 복사 작업에 대한 SQL 쿼리를 지정합니다. 이 속성을 사용하여 미리 로드된 데이터를 정리합니다. | 아니요 |
importSettings | Snowflake에 데이터를 쓰는 데 사용되는 고급 설정입니다. 명령문이 호출될 때 서비스에서 전달하는 COPY into 명령에서 지원되는 항목을 구성할 수 있습니다. | 예 |
importSettings 에서: |
||
type | SnowflakeImportCopyCommand로 설정된 내보내기 명령의 유형입니다. | 예 |
storageIntegration | Snowflake에서 만든 스토리지 통합의 이름을 지정합니다. 스토리지 통합을 사용하는 필수 구성 요소 단계는 Snowflake 스토리지 통합구성을 참조하세요. | 아니요 |
additionalCopyOptions | 키-값 쌍의 사전으로 제공되는 추가 복사 옵션입니다. 예: ON_ERROR, FORCE, LOAD_UNCERTAIN_FILES. 자세한 내용은 Snowflake 복사 옵션을 참조하세요. | 아니요 |
additionalFormatOptions | 키-값 쌍의 사전으로 COPY 명령에 제공되는 추가 파일 형식 옵션입니다. 예: DATE_FORMAT, TIME_FORMAT, TIMESTAMP_FORMAT. 자세한 내용은 Snowflake 형식 유형 옵션을 참조하세요. | 아니요 |
참고 항목
다음 명령을 실행하고 INFORMATION_SCHEMA 스키마 및 COLUMNS 테이블에 액세스할 수 있는 권한이 있는지 확인합니다.
SELECT CURRENT_REGION()
COPY INTO <table>
SHOW REGIONS
CREATE OR REPLACE STAGE
DROP STAGE
Snowflake로 직접 복사
원본 데이터 저장소와 형식이 이 섹션에 설명된 조건을 충족하는 경우 복사 작업을 사용하여 원본에서 Snowflake로 직접 복사할 수 있습니다. 이 서비스는 설정을 확인하고 다음 조건이 충족되지 않으면 복사 작업 실행에 실패합니다.
싱크에서
storageIntegration
을(를) 지정하는 경우:원본 데이터 저장소는 Snowflake의 외부 단계에서 참조한 Azure Blob Storage입니다. 데이터를 복사하기 전에 다음 단계를 완료해야 합니다.
지원되는 인증 유형을 사용하여 원본 Azure Blob Storage에 대한 Azure Blob Storage에 연결된 서비스를 만듭니다.
원본 Azure Blob Storage 액세스 제어(IAM) Snowflake 서비스 주체에게 최소 Storage Blob 데이터 판독기 역할을 부여합니다.
싱크에서
storageIntegration
을(를) 지정하지 않는 경우:원본 연결된 서비스는 공유 액세스 서명 인증을 사용하는 Azure Blob Storage입니다. 다음과 같은 지원되는 형식으로 Azure Data Lake Storage Gen2에서 데이터를 직접 복사하려는 경우 Azure Data Lake Storage Gen2 계정에 대해 SAS 인증을 사용하여 Azure Blob Storage 연결된 서비스를 만들어 Snowflake 준비된 복사본을 사용하지 않도록 할 수 있습니다.
원본 데이터 형식은 다음 구성과 함께 Parquet, 구분된 텍스트 또는 JSON입니다.
Parquet 형식의 경우 압축 코덱은 None 또는 Snappy입니다.
구분된 텍스트 형식:
rowDelimiter
는 \r\n 또는 모든 단일 문자입니다. 행 구분 기호가 “\r\n”이 아닌 경우firstRowAsHeader
는 false여야 하고skipLineCount
는 지정되지 않습니다.compression
은 압축 안 함, gzip, bzip2 또는 deflate일 수 있습니다.encodingName
은 기본값으로 남아 있거나 “UTF-8”, “UTF-16”, “UTF-16BE”, “UTF-32”, “UTF-32BE”, “BIG5”, “EUC-JP”, “EUC-KR”, “GB18030”, “ISO-2022-JP”, “ISO-2022-KR”, “ISO-8859-1”, “ISO-8859-2”, “ISO-8859-5”, “ISO-8859-6”, “ISO-8859-7”, “ISO-8859-8”, “ISO-8859-9”, “WINDOWS-1250”, “WINDOWS-1251”, “WINDOWS-1252”, “WINDOWS-1253”, “WINDOWS-1254”, “WINDOWS-1255”로 설정됩니다.quoteChar
은 큰따옴표, 작은따옴표 또는 빈 문자열(따옴표 문자 없음)입니다.
JSON 형식의 경우 직접 복사는 싱크 Snowflake 테이블에 단일 열만 있고 이 열의 데이터 유형이 VARIANT, OBJECT 또는 ARRAY인 경우에만 지원합니다.
compression
은 압축 안 함, gzip, bzip2 또는 deflate일 수 있습니다.encodingName
는 기본값으로 남아 있거나 utf-8로 설정됩니다.- 열 매핑은 지정되지 않았습니다.
복사 작업 원본:
additionalColumns
는 지정되지 않았습니다.- 원본이 폴더인 경우
recursive
는 true로 설정됩니다. prefix
,modifiedDateTimeStart
,modifiedDateTimeEnd
및enablePartitionDiscovery
가 지정되지 않았습니다.
예제:
"activities":[
{
"name": "CopyToSnowflake",
"type": "Copy",
"inputs": [
{
"referenceName": "<input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<Snowflake output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "<source type>"
},
"sink": {
"type": "SnowflakeV2Sink",
"importSettings": {
"type": "SnowflakeImportCopyCommand",
"copyOptions": {
"FORCE": "TRUE",
"ON_ERROR": "SKIP_FILE"
},
"fileFormatOptions": {
"DATE_FORMAT": "YYYY-MM-DD"
},
"storageIntegration": "< Snowflake storage integration name >"
}
}
}
}
]
Snowflake로 준비된 복사
원본 데이터 저장소 또는 형식이 Snowflake COPY 명령과 기본적으로 호환되지 않는 경우 마지막 섹션에 설명된 대로 중간 Azure Blob Storage 인스턴스를 사용하여 기본 제공된 준비된 복사를 사용하도록 설정합니다. 또한 단계적 복사 기능은 더 나은 처리량을 제공합니다. 이 서비스는 Snowflake의 데이터 형식 요구 사항을 충족하도록 데이터를 자동으로 변환합니다. 그런 다음, COPY 명령을 호출하여 데이터를 Snowflake로 로드합니다. 마지막으로, Blob Storage에서 임시 데이터를 정리합니다. 스테이징을 사용하는 데이터 복사에 관한 자세한 내용은 준비된 복사를 참조하세요.
이 기능을 사용하려면 중간 스테이징으로 Azure Storage 계정을 참조하는 Azure Blob Storage 연결된 서비스를 만듭니다. 그런 다음, 복사 작업에서 enableStaging
및 stagingSettings
속성을 지정합니다.
싱크에서
storageIntegration
을(를) 지정하는 경우 중간 준비 Azure Blob Storage는 Snowflake의 외부 단계에서 참조한 항목이어야 합니다. 지원되는 인증을 사용하여 Azure Blob Storage 연결된 서비스를 만들고 Azure Blob Storage 액세스 제어(IAM) 스테이징에서 Snowflake 서비스 주체에 이상의 Storage Blob 데이터 판독기 역할을 부여해야 합니다.싱크에서
storageIntegration
을(를) 지정하지 않으면 스테이징 Azure Blob Storage 연결된 서비스는 Snowflake COPY 명령에 필요한 대로 공유 액세스 서명 인증을 사용해야 합니다.
예제:
"activities":[
{
"name": "CopyToSnowflake",
"type": "Copy",
"inputs": [
{
"referenceName": "<input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<Snowflake output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "<source type>"
},
"sink": {
"type": "SnowflakeV2Sink",
"importSettings": {
"type": "SnowflakeImportCopyCommand",
"storageIntegration": "< Snowflake storage integration name >"
}
},
"enableStaging": true,
"stagingSettings": {
"linkedServiceName": {
"referenceName": "MyStagingBlob",
"type": "LinkedServiceReference"
},
"path": "mystagingpath"
}
}
}
]
매핑 데이터 흐름 속성
매핑 데이터 흐름에서 데이터를 변환하는 경우 Snowflake에서 테이블에 대한 읽기 및 쓰기를 수행할 수 있습니다. 자세한 내용은 매핑 데이터 흐름에서 원본 변환 및 싱크 변환을 참조하세요. Snowflake 데이터 세트 또는 인라인 데이터 세트를 원본 및 싱크 유형으로 사용하도록 선택할 수 있습니다.
원본 변환
다음 표에서는 Snowflake 원본에서 지원하는 속성을 나열합니다. 이러한 속성은 원본 옵션 탭에서 편집할 수 있습니다. 커넥터는 Snowflake 내부 데이터 전송을 활용합니다.
이름 | 설명 | 필수 | 허용된 값 | 데이터 흐름 스크립트 속성 |
---|---|---|---|---|
테이블 | 테이블을 입력으로 선택하는 경우 데이터 흐름은 인라인 데이터 세트를 사용할 때 Snowflake 데이터 세트 또는 원본 옵션에 지정된 테이블에서 모든 데이터를 페치합니다. | 아니요 | 문자열 | (인라인 데이터 세트에만 해당) tableName schemaName |
쿼리 | 쿼리를 입력으로 선택하는 경우 Snowflake에서 데이터를 페치하는 쿼리를 입력합니다. 이렇게 설정하면 데이터 세트에서 선택한 모든 테이블이 재정의됩니다. 스키마 이름, 테이블 및 열에 소문자가 포함된 경우 쿼리의 개체 식별자(예: select * from "schema"."myTable" )를 인용합니다. |
아니요 | 문자열 | query |
증분 추출 사용(미리 보기) | 이 옵션을 사용하여 파이프라인이 마지막으로 실행된 이후 변경된 행만 처리하도록 ADF에 지시합니다. | 아니요 | 부울 | enableCdc |
증분 열 | 증분 추출 기능을 사용하는 경우 원본 테이블에서 워터마크로 사용할 날짜/시간 또는 숫자 열을 선택해야 합니다. | 아니요 | 문자열 | waterMarkColumn |
Snowflake 변경 내용 추적 사용(미리 보기) | 이 옵션을 사용하면 ADF는 Snowflake 변경 데이터 캡처 기술을 활용하여 이전 파이프라인 실행 이후의 델타 데이터만 처리할 수 있습니다. 이 옵션은 증분 열이 필요 없이 행 삽입, 업데이트 및 삭제 작업을 통해 델타 데이터를 자동으로 로드합니다. | 아니요 | 부울 | enableNativeCdc |
순 변경 내용 | snowflake 변경 내용 추적을 사용하는 경우 이 옵션을 사용하여 중복된 변경된 행 또는 전체 변경 내용을 가져올 수 있습니다. 중복 제거된 변경 행에는 특정 시점 이후 변경된 최신 버전의 행만 표시되는 반면, 전체 변경에는 삭제되거나 업데이트된 행을 포함하여 변경된 각 행의 모든 버전이 표시됩니다. 예를 들어 행을 업데이트하면 전체 변경 내용에는 삭제 버전과 삽입 버전이 표시되지만 중복이 제거된 변경 행에는 삽입 버전만 표시됩니다. 사용 사례에 따라 필요에 맞는 옵션을 선택할 수 있습니다. 기본 옵션은 false이며 이는 철저한 변경을 의미합니다. | 아니요 | 부울 | netChanges |
시스템 열 포함 | snowflake 변경 내용 추적을 사용하는 경우 systemColumns 옵션을 사용하여 Snowflake에서 제공하는 메타데이터 스트림 열이 변경 내용 추적 출력에 포함되거나 제외되는지 여부를 제어할 수 있습니다. 기본적으로 systemColumns는 true로 설정됩니다. 이는 메타데이터 스트림 열이 포함된다는 의미입니다. 제외하려면 systemColumns를 false로 설정할 수 있습니다. | 아니요 | 부울 | systemColumns |
처음부터 읽기 시작 | 증분 추출 및 변경 내용 추적을 사용하여 이 옵션을 설정하면 증분 추출이 설정된 파이프라인을 처음 실행할 때 ADF가 모든 행을 읽도록 지시합니다. | 아니요 | 부울 | skipInitialLoad |
Snowflake 원본 스크립트 예제
Snowflake 데이터 세트를 원본 유형으로 사용하는 경우 연결된 데이터 흐름 스크립트는 다음과 같습니다.
source(allowSchemaDrift: true,
validateSchema: false,
query: 'select * from MYTABLE',
format: 'query') ~> SnowflakeSource
인라인 데이터 세트를 사용하는 경우 연결된 데이터 흐름 스크립트는 다음과 같습니다.
source(allowSchemaDrift: true,
validateSchema: false,
format: 'query',
query: 'select * from MYTABLE',
store: 'snowflake') ~> SnowflakeSource
네이티브 변경 내용 추적
Azure Data Factory는 이제 로그 형식의 변경 내용 추적과 관련된 변경 내용 추적이라는 Snowflake의 네이티브 기능을 지원합니다. snowflake의 이 기능을 사용하면 시간이 지남에 따라 데이터의 변경 내용을 추적할 수 있으므로 증분 데이터 로드 및 감사 목적에 유용합니다. 이 기능을 활용하기 위해 변경 데이터 캡처를 사용하도록 설정하고 Snowflake 변경 내용 추적을 선택하면 원본 snowflake 테이블에 대한 변경 내용 추적을 사용하도록 설정하는 원본 테이블에 대한 스트림 개체를 만듭니다. 그런 다음 쿼리에서 CHANGES 절을 사용하여 원본 테이블에서 새 데이터나 업데이트된 데이터만 가져옵니다. 또한 snowflake 원본 테이블에 설정된 데이터 보존 시간 간격 내에 변경 내용이 소비되도록 파이프라인을 예약하는 것이 좋습니다. 그렇지 않으면 사용자가 캡처된 변경 내용에서 일관되지 않은 동작을 볼 수 있습니다.
싱크 변환
다음 표에서는 Snowflake 싱크에서 지원하는 속성을 나열합니다. 이러한 속성은 설정 탭에서 편집할 수 있습니다. 인라인 데이터 세트를 사용하는 경우 데이터 세트 속성 섹션에 설명된 속성과 동일한 추가 설정이 표시됩니다. 커넥터는 Snowflake 내부 데이터 전송을 활용합니다.
이름 | 설명 | 필수 | 허용된 값 | 데이터 흐름 스크립트 속성 |
---|---|---|---|---|
Update 메서드 | Snowflake 대상에서 허용되는 작업을 지정합니다. 행을 업데이트, upsert 또는 삭제하려면 해당 작업을 위해 행에 태그를 지정하는 데 행 변경 변환이 필요합니다. |
예 | true 또는 false |
deletable insertable updateable upsertable |
키 열 | 업데이트, upsert 및 삭제의 경우 변경할 행을 결정하기 위해 키 열을 설정해야 합니다. | 아니요 | 배열 | 키 |
테이블 작업 | 쓰기 전에 대상 테이블에서 모든 행을 다시 만들지 또는 제거할지 여부를 결정합니다. - None: 테이블에 대한 작업이 수행되지 않습니다. - Recreate: 테이블이 삭제되고 다시 생성됩니다. 동적으로 새 테이블을 만드는 경우 필요합니다. - Truncate: 대상 테이블의 모든 행이 제거됩니다. |
아니요 | true 또는 false |
recreate truncate |
Snowflake 싱크 스크립트 예제
Snowflake 데이터 세트를 싱크 유형으로 사용하는 경우 연결된 데이터 흐름 스크립트는 다음과 같습니다.
IncomingStream sink(allowSchemaDrift: true,
validateSchema: false,
deletable:true,
insertable:true,
updateable:true,
upsertable:false,
keys:['movieId'],
format: 'table',
skipDuplicateMapInputs: true,
skipDuplicateMapOutputs: true) ~> SnowflakeSink
인라인 데이터 세트를 사용하는 경우 연결된 데이터 흐름 스크립트는 다음과 같습니다.
IncomingStream sink(allowSchemaDrift: true,
validateSchema: false,
format: 'table',
tableName: 'table',
schemaName: 'schema',
deletable: true,
insertable: true,
updateable: true,
upsertable: false,
store: 'snowflake',
skipDuplicateMapInputs: true,
skipDuplicateMapOutputs: true) ~> SnowflakeSink
쿼리 푸시다운 최적화
파이프라인 로깅 수준을 없음으로 설정하면 중간 변환 메트릭의 전송을 제외하여 Spark 최적화에 대한 잠재적 방해를 방지하고 Snowflake에서 제공하는 쿼리 푸시다운 최적화를 사용하도록 설정합니다. 이 푸시다운 최적화를 통해 광범위한 데이터 세트가 있는 대규모 Snowflake 테이블의 성능이 크게 향상됩니다.
참고 항목
Snowflake에서는 임시 테이블을 지원하지 않습니다. 임시 테이블은 임시 테이블을 만든 세션이나 사용자에 로컬이므로 다른 세션에서 액세스할 수 없고 Snowflake가 일반 테이블로 덮어쓰는 경향이 있기 때문입니다. Snowflake는 전역적으로 액세스할 수 있는 임시 테이블을 대안으로 제공하지만 수동 삭제가 필요하므로 원본 스키마에서 삭제 작업을 방지하는 임시 테이블을 사용하는 네이티브 목표와 모순됩니다.
조회 작업 속성
속성에 대한 자세한 내용은 조회 작업을 참조하세요.
Snowflake 커넥터 업그레이드
Snowflake 커넥터를 업그레이드하려면 병렬 업그레이드 또는 현재 위치 업그레이드를 수행할 수 있습니다.
병렬 업그레이드
병렬 업그레이드를 수행하려면 다음 단계를 완료합니다.
- 새 Snowflake 연결된 서비스를 만들고 연결된 서비스 속성을 참조하여 구성합니다.
- 새로 만든 Snowflake 연결된 서비스를 기반으로 데이터 세트를 만듭니다.
- 새 연결된 서비스 및 데이터 세트를 레거시 개체를 대상으로 하는 파이프라인의 기존 서비스로 바꿉니다.
현재 위치 업그레이드
현재 위치 업그레이드를 수행하려면 기존 연결된 서비스 페이로드를 편집하고 데이터 세트를 업데이트하여 새 연결된 서비스를 사용해야 합니다.
Snowflake에서 SnowflakeV2 로 형식을 업데이트합니다.
연결된 서비스 페이로드를 레거시 형식에서 새 패턴으로 수정합니다. 위에서 언급한 형식을 변경한 후 사용자 인터페이스에서 각 필드를 채우거나 JSON 편집기를 통해 페이로드를 직접 업데이트할 수 있습니다. 지원되는 연결 속성은 이 문서의 연결된 서비스 속성 섹션을 참조하세요. 다음 예제에서는 레거시 및 새 Snowflake 연결된 서비스에 대한 페이로드의 차이점을 보여 줍니다.
레거시 Snowflake 연결된 서비스 JSON 페이로드:
{ "name": "Snowflake1", "type": "Microsoft.DataFactory/factories/linkedservices", "properties": { "annotations": [], "type": "Snowflake", "typeProperties": { "authenticationType": "Basic", "connectionString": "jdbc:snowflake://<fake_account>.snowflakecomputing.com/?user=FAKE_USER&db=FAKE_DB&warehouse=FAKE_DW&schema=PUBLIC", "encryptedCredential": "<your_encrypted_credential_value>" }, "connectVia": { "referenceName": "AzureIntegrationRuntime", "type": "IntegrationRuntimeReference" } } }
새 Snowflake 연결된 서비스 JSON 페이로드:
{ "name": "Snowflake2", "type": "Microsoft.DataFactory/factories/linkedservices", "properties": { "parameters": { "schema": { "type": "string", "defaultValue": "PUBLIC" } }, "annotations": [], "type": "SnowflakeV2", "typeProperties": { "authenticationType": "Basic", "accountIdentifier": "<FAKE_Account>", "user": "FAKE_USER", "database": "FAKE_DB", "warehouse": "FAKE_DW", "encryptedCredential": "<placeholder>" }, "connectVia": { "referenceName": "AutoResolveIntegrationRuntime", "type": "IntegrationRuntimeReference" } } }
새 연결된 서비스를 사용하도록 데이터 세트를 업데이트합니다. 새로 만든 연결된 서비스를 기반으로 새 데이터 세트를 만들거나 기존 데이터 세트의 형식 속성을 SnowflakeTable에서 SnowflakeV2Table로 업데이트할 수 있습니다.
Snowflake와 Snowflake(레거시)의 차이점
Snowflake 커넥터는 새로운 기능을 제공하며 Snowflake(레거시) 커넥터의 대부분의 기능과 호환됩니다. 아래 표에는 Snowflake와 Snowflake(레거시)의 기능 차이점이 나와 있습니다.
Snowflake | Snowflake(레거시) |
---|---|
기본 및 키 쌍 인증을 지원합니다. | 기본 인증을 지원합니다. |
현재 스크립트 작업에서는 스크립트 매개 변수가 지원되지 않습니다. 대안으로 스크립트 매개 변수에 대한 동적 식을 활용합니다. 자세한 내용은 Azure Data Factory 및 Azure Synapse Analytics의 식 및 함수를 참조하세요. | 스크립트 작업에서 스크립트 매개 변수를 지원합니다. |
조회 작업에서 BigDecimal을 지원합니다. Snowflake에 정의된 NUMBER 형식은 조회 작업에서 문자열로 표시됩니다. 숫자 형식으로 은밀하게 처리하려면 int 함수 또는 float 함수와 함께 파이프라인 매개 변수를 사용할 수 있습니다. 예를 들어 int(activity('lookup').output.firstRow.VALUE) , float(activity('lookup').output.firstRow.VALUE) 이 있습니다. |
BigDecimal은 조회 작업에서 지원되지 않습니다. |
accountIdentifier , warehouse 및 database schema role 속성은 연결을 설정하는 데 사용됩니다. |
이 connectionstring 속성은 연결을 설정하는 데 사용됩니다. |
Snowflake의 타임스탬프 데이터 형식은 조회 및 스크립트 작업에서 DateTimeOffset 데이터 형식으로 읽습니다. | Snowflake의 타임스탬프 데이터 형식은 조회 및 스크립트 작업에서 DateTime 데이터 형식으로 읽습니다. 커넥터를 업그레이드한 후에도 파이프라인에서 Datetime 값을 매개 변수로 사용해야 하는 경우 formatDateTime 함수(권장) 또는 concat 함수를 사용하여 DateTimeOffset 형식을 DateTime 형식으로 변환할 수 있습니다. 예: formatDateTime(activity('lookup').output.firstRow.DATETIMETYPE) , concat(substring(activity('lookup').output.firstRow.DATETIMETYPE, 0, 19), 'Z') |
관련 콘텐츠
복사 작업에서 원본 및 싱크로 지원되는 데이터 저장소 목록은 지원되는 데이터 저장소 및 형식을 참조하세요.