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
복사 작업(원본/싱크) ① ②
매핑 데이터 흐름(원본/싱크)
조회 작업 ① ②
스크립트 작업 ① ②

① 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에 연결된 서비스를 만듭니다.

  1. Azure Data Factory 또는 Synapse 작업 영역에서 관리 탭으로 이동하여 연결된 서비스를 선택하고 새로 만들기를 클릭합니다.

  2. Snowflake를 검색하고 Snowflake 커넥터를 선택합니다.

    Snowflake 커넥터의 스크린샷

  3. 서비스 세부 정보를 구성하고, 연결을 테스트하고, 새로운 연결된 서비스를 만듭니다.

    Snowflake의 연결된 서비스 구성의 스크린샷.

커넥터 구성 세부 정보

다음 섹션에서는 Snowflake 커넥터에 국한된 엔터티를 정의하는 데 사용되는 속성에 대해 자세히 설명합니다.

연결된 서비스 속성

Snowflake 연결된 서비스에 대해 지원되는 일반 속성은 다음과 같습니다.

속성 설명 필수
type type 속성은 SnowflakeV2로 설정해야 합니다.
accountIdentifier 계정 및 해당 조직의 이름. 예를 들어 myorg-account123입니다.
database 연결 후 세션에 사용되는 기본 데이터베이스.
warehouse 연결 후 세션에 사용되는 기본 가상 웨어하우스.
authenticationType Snowflake 서비스에 연결하는 데 사용되는 인증 형식. 허용되는 값은 기본(기본값) 또는 KeyPair입니다. 추가 속성 및 예제를 보려면 아래 해당 섹션을 참조하세요. 아니요
역할(role) 연결 후 세션에 사용되는 기본 보안 역할. 아니요
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로 설정된 내보내기 명령의 유형입니다.
additionalCopyOptions 키-값 쌍의 사전으로 제공되는 추가 복사 옵션입니다. 예: MAX_FILE_SIZE, 덮어쓰기. 자세한 내용은 Snowflake 복사 옵션을 참조하세요. 아니요
additionalFormatOptions 키-값 쌍의 사전으로 COPY 명령에 제공되는 추가 파일 형식 옵션입니다. 예: DATE_FORMAT, TIME_FORMAT, TIMESTAMP_FORMAT. 자세한 내용은 Snowflake 형식 유형 옵션을 참조하세요. 아니요

참고 항목

다음 명령을 실행하고 INFORMATION_SCHEMA 스키마 및 COLUMNS 테이블에 액세스할 수 있는 권한이 있는지 확인합니다.

  • COPY INTO <location>

Snowflake에서 직접 복사

싱크 데이터 저장소와 형식이 이 섹션에 설명된 조건을 충족하는 경우 복사 작업을 사용하여 Snowflake에서 싱크로 직접 복사할 수 있습니다. 이 서비스는 설정을 확인하고 다음 조건이 충족되지 않으면 복사 작업 실행에 실패합니다.

  • 싱크 연결된 서비스공유 액세스 서명 인증을 사용하는 Azure Blob Storage입니다. 다음의 지원되는 형식으로 Azure Data Lake Storage Gen2에 직접 데이터를 복사하려면 Snowflake에서 준비된 복사를 사용하지 않도록 ADLS Gen2 계정에 대해 SAS 인증을 사용하여 Azure Blob 연결된 서비스를 만들 수 있습니다.

  • 싱크 데이터 형식은 다음 구성과 함께 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",
                "sqlReaderQuery": "SELECT * FROM MYTABLE",
                "exportSettings": {
                    "type": "SnowflakeExportCopyCommand",
                    "additionalCopyOptions": {
                        "MAX_FILE_SIZE": "64000000",
                        "OVERWRITE": true
                    },
                    "additionalFormatOptions": {
                        "DATE_FORMAT": "'MM/DD/YYYY'"
                    }
                }
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Snowflake에서 준비된 복사

싱크 데이터 저장소 또는 형식이 Snowflake COPY 명령과 기본적으로 호환되지 않는 경우 마지막 섹션에 설명된 대로 중간 Azure Blob Storage 인스턴스를 사용하여 기본 제공된 준비된 복사를 사용하도록 설정합니다. 또한 단계적 복사 기능은 더 나은 처리량을 제공합니다. 이 서비스는 Snowflake에서 데이터를 스테이징 스토리지로 내보낸 다음, 데이터를 싱크에 복사하고 마지막으로 준비 스토리지에서 임시 데이터를 정리합니다. 스테이징을 사용하는 데이터 복사에 관한 자세한 내용은 준비된 복사를 참조하세요.

이 기능을 사용하려면 중간 스테이징으로 Azure Storage 계정을 참조하는 Azure Blob Storage 연결된 서비스를 만듭니다. 그런 다음, 복사 작업에서 enableStagingstagingSettings 속성을 지정합니다.

참고 항목

스테이징 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",               
                "sqlReaderQuery": "SELECT * FROM MyTable",
                "exportSettings": {
                    "type": "SnowflakeExportCopyCommand"
                }
            },
            "sink": {
                "type": "<sink type>"
            },
            "enableStaging": true,
            "stagingSettings": {
                "linkedServiceName": {
                    "referenceName": "MyStagingBlob",
                    "type": "LinkedServiceReference"
                },
                "path": "mystagingpath"
            }
        }
    }
]

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로 설정된 내보내기 명령의 유형입니다.
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로 직접 복사할 수 있습니다. 이 서비스는 설정을 확인하고 다음 조건이 충족되지 않으면 복사 작업 실행에 실패합니다.

  • 원본 연결된 서비스공유 액세스 서명 인증을 사용하는 Azure Blob Storage입니다. 다음의 지원되는 형식으로 Azure Data Lake Storage Gen2에서 직접 데이터를 복사하려면 Snowflake로 준비된 복사를 사용하지 않도록 ADLS Gen2 계정에 대해 SAS 인증을 사용하여 Azure Blob 연결된 서비스를 만들 수 있습니다.

  • 원본 데이터 형식은 다음 구성과 함께 Parquet, 구분된 텍스트 또는 JSON입니다.

    • Parquet 형식의 경우 압축 코덱은 None 또는 Snappy입니다.

    • 구분된 텍스트 형식:

      • rowDelimiter\r\n 또는 모든 단일 문자입니다. 행 구분 기호가 “\r\n”이 아닌 경우 firstRowAsHeaderfalse여야 하고 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, modifiedDateTimeEndenablePartitionDiscovery가 지정되지 않았습니다.

예제:

"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"
                    }
                }
            }
        }
    }
]

Snowflake로 준비된 복사

원본 데이터 저장소 또는 형식이 Snowflake COPY 명령과 기본적으로 호환되지 않는 경우 마지막 섹션에 설명된 대로 중간 Azure Blob Storage 인스턴스를 사용하여 기본 제공된 준비된 복사를 사용하도록 설정합니다. 또한 단계적 복사 기능은 더 나은 처리량을 제공합니다. 이 서비스는 Snowflake의 데이터 형식 요구 사항을 충족하도록 데이터를 자동으로 변환합니다. 그런 다음, COPY 명령을 호출하여 데이터를 Snowflake로 로드합니다. 마지막으로, Blob Storage에서 임시 데이터를 정리합니다. 스테이징을 사용하는 데이터 복사에 관한 자세한 내용은 준비된 복사를 참조하세요.

이 기능을 사용하려면 중간 스테이징으로 Azure Storage 계정을 참조하는 Azure Blob Storage 연결된 서비스를 만듭니다. 그런 다음, 복사 작업에서 enableStagingstagingSettings 속성을 지정합니다.

참고 항목

스테이징 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"
                }
            },
            "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(레거시)의 차이점

Snowflake 커넥터는 새로운 기능을 제공하며 Snowflake(레거시) 커넥터의 대부분의 기능과 호환됩니다. 아래 표에는 Snowflake와 Snowflake(레거시)의 기능 차이점이 나와 있습니다.

Snowflake Snowflake(레거시)
기본 및 키 쌍 인증을 지원합니다. 기본 인증을 지원합니다.
현재 스크립트 작업에서는 스크립트 매개 변수가 지원되지 않습니다. 대안으로 스크립트 매개 변수에 대한 동적 식을 활용합니다. 자세한 내용은 Azure Data Factory 및 Azure Synapse Analytics의 식 및 함수를 참조하세요. 스크립트 작업에서 스크립트 매개 변수를 지원합니다.
스크립트 작업의 다중 SQL 문 실행은 현재 지원되지 않습니다. 여러 SQL 문을 실행하려면 쿼리를 여러 스크립트 블록으로 나눕니다. 스크립트 작업에서 여러 SQL 문 실행을 지원합니다.
조회 작업에서 BigDecimal을 지원합니다. Snowflake에 정의된 NUMBER 형식은 조회 작업에서 문자열로 표시됩니다. BigDecimal은 조회 작업에서 지원되지 않습니다.

복사 작업에서 원본 및 싱크로 지원되는 데이터 저장소 목록은 지원되는 데이터 저장소 및 형식을 참조하세요.