Azure Data Factory 또는 Synapse Analytics를 사용하여 Azure Table Storage 간에 데이터 복사

적용 대상: Azure Data Factory Azure Synapse Analytics

기업용 올인원 분석 솔루션인 Microsoft Fabric의 Data Factory를 사용해 보세요. Microsoft Fabric은 데이터 이동부터 데이터 과학, 실시간 분석, 비즈니스 인텔리전스 및 보고에 이르기까지 모든 것을 다룹니다. 무료로 새 평가판을 시작하는 방법을 알아봅니다!

이 문서에서는 Azure Data Factory 및 Synapse Analytics 파이프라인에서 복사 작업을 사용하여 Azure Table Storage 간 데이터를 복사하는 방법을 간략하게 설명합니다. 이 문서는 복사 작업에 대한 일반적인 개요를 제공하는 복사 작업 개요 문서를 기반으로 합니다.

참고 항목

Azure Az PowerShell 모듈을 사용하여 Azure와 상호 작용하는 것이 좋습니다. 시작하려면 Azure PowerShell 설치를 참조하세요. Az PowerShell 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 Azure PowerShell을 AzureRM에서 Azure로 마이그레이션을 참조하세요.

지원되는 기능

이 Azure Table Storage 커넥터는 다음 기능에 대해 지원됩니다.

지원되는 기능 IR 관리형 프라이빗 엔드포인트
복사 작업(원본/싱크) ① ② ✓ 스토리지 계정 V1 제외
조회 작업 ① ② ✓ 스토리지 계정 V1 제외

① Azure 통합 런타임 ② 자체 호스팅 통합 런타임

지원되는 모든 원본 데이터 스토리지의 데이터를 Table Storage에 복사할 수 있습니다. 또한 Table Storage의 데이터를 지원되는 모든 싱크 데이터 스토리지에 복사할 수 있습니다. 복사 작업의 원본 또는 싱크로 지원되는 데이터 저장소 목록은 지원되는 데이터 저장소 표를 참조하세요.

특히 이 Azure Table 커넥터는 계정 키 및 서비스 공유 액세스 서명 인증을 모두 사용하여 데이터를 복사할 수 있습니다.

시작하기

파이프라인에 복사 작업을 수행하려면 다음 도구 또는 SDK 중 하나를 사용하면 됩니다.

UI를 사용하여 Azure Table Storage 연결된 서비스 만들기

다음 단계를 사용하여 Azure Portal UI에서 Azure Table Storage 연결된 서비스를 만듭니다.

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

  2. Azure Table을 검색하고 Azure Table Storage 커넥터를 선택합니다.

    Screenshot of the Azure Table storage connector.

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

    Screenshot of configuration for an Azure Table storage linked service.

커넥터 구성 세부 정보

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

연결된 서비스 속성

계정 키 사용

계정 키를 사용하여 Azure Storage 연결된 서비스를 만들 수 있습니다. 서비스에 Storage에 대한 전역 액세스를 제공합니다. 다음과 같은 속성이 지원됩니다.

속성 설명 필수
type 형식 속성은 AzureTableStorage로 설정되어야 합니다.
connectionString connectionString 속성에 대한 Storage에 연결하는 데 필요한 정보를 지정합니다.
Azure Key Vault에 계정 키를 넣고, 연결 문자열에서 accountKey 구성을 끌어올 수도 있습니다. 자세한 내용은 다음 샘플 및 Azure Key Vault에 자격 증명 저장 문서를 참조하세요.
connectVia 데이터 저장소에 연결하는 데 사용할 통합 런타임입니다. Azure Integration Runtime 또는 자체 호스팅 Integration Runtime을 사용할 수 있습니다(데이터 저장소가 프라이빗 네트워크에 있는 경우). 지정하지 않으면 기본 Azure Integration Runtime을 사용합니다. 아니요

참고 항목

"AzureStorage" 유형의 연결된 서비스를 사용하는 경우에도 있는 그대로 계속 지원되지만, 앞으로 이 새로운 "AzureTableStorage" 연결된 서비스 유형을 사용하는 것이 좋습니다.

예제:

{
    "name": "AzureTableStorageLinkedService",
    "properties": {
        "type": "AzureTableStorage",
        "typeProperties": {
            "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

예제: Azure Key Vault에 계정 키 저장

{
    "name": "AzureTableStorageLinkedService",
    "properties": {
        "type": "AzureTableStorage",
        "typeProperties": {
            "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;",
            "accountKey": { 
                "type": "AzureKeyVaultSecret", 
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>", 
                    "type": "LinkedServiceReference" 
                }, 
                "secretName": "<secretName>" 
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

공유 액세스 서명 인증 사용

공유 액세스 서명을 사용하여 Storage 연결된 서비스를 만들 수도 있습니다. 이 서비스는 스토리지의 모든/특정 리소스에 대해 제한된/시간 제한 액세스를 서비스에 제공합니다.

공유 액세스 서명은 스토리지 계정의 리소스에 대한 위임된 권한을 제공합니다. 이를 사용하여 스토리지 계정의 개체에 대해 지정된 시간 동안 지정된 권한 집합이 있는 제한된 권한을 클라이언트에 부여할 수 있습니다. 계정 액세스 키를 공유할 필요가 없습니다. 공유 액세스 서명은 스토리지 리소스에 대해 인증된 액세스에 필요한 모든 정보를 쿼리 매개 변수에 포함하는 URI입니다. 공유 액세스 서명을 사용하여 스토리지 리소스에 액세스하려면 클라이언트에서 공유 액세스 서명을 해당 생성자 또는 메서드에 전달하기만 하면 됩니다. 공유 액세스 서명에 대한 자세한 내용은 공유 액세스 서명: 공유 액세스 서명 모델 이해를 참조하세요.

참고 항목

이제 서비스 공유 액세스 서명계정 공유 액세스 서명 이 모두 지원됩니다. 공유 액세스 서명에 대한 자세한 내용은 SAS(공유 액세스 서명)를 사용하여 Azure Storage 리소스에 대한 제한된 액세스 권한 부여를 참조하세요.

스토리지 계정에 대한 서비스 공유 액세스 서명을 생성하려면 다음 PowerShell 명령을 실행합니다. 자리 표시자를 바꾸고 필요한 권한을 부여합니다. $context = New-AzStorageContext -StorageAccountName <accountName> -StorageAccountKey <accountKey> New-AzStorageContainerSASToken -Name <containerName> -Context $context -Permission rwdl -StartTime <startTime> -ExpiryTime <endTime> -FullUri

공유 액세스 서명 인증을 사용하는 데 지원되는 속성은 다음과 같습니다.

속성 설명 필수
type 형식 속성은 AzureTableStorage로 설정되어야 합니다.
sasUri 테이블에 대한 공유 액세스 서명 URI의 SAS URI를 지정합니다.
이 필드를 SecureString으로 표시하여 안전하게 저장합니다. SAS 토큰을 Azure Key Vault에 넣어 자동 회전을 활용하고 토큰 부분을 제거할 수도 있습니다. 자세한 내용은 다음 샘플 및 Azure Key Vault에 자격 증명 저장 문서를 참조하세요.
connectVia 데이터 저장소에 연결하는 데 사용할 통합 런타임입니다. Azure Integration Runtime 또는 자체 호스팅 Integration Runtime(데이터 저장소가 사설망에 있는 경우)을 사용할 수 있습니다. 지정하지 않으면 기본 Azure Integration Runtime을 사용합니다. 아니요

참고 항목

"AzureStorage" 유형의 연결된 서비스를 사용하는 경우에도 있는 그대로 계속 지원되지만, 앞으로 이 새로운 "AzureTableStorage" 연결된 서비스 유형을 사용하는 것이 좋습니다.

예제:

{
    "name": "AzureTableStorageLinkedService",
    "properties": {
        "type": "AzureTableStorage",
        "typeProperties": {
            "sasUri": {
                "type": "SecureString",
                "value": "<SAS URI of the Azure Storage resource e.g. https://<account>.table.core.windows.net/<table>?sv=<storage version>&amp;st=<start time>&amp;se=<expire time>&amp;sr=<resource>&amp;sp=<permissions>&amp;sip=<ip range>&amp;spr=<protocol>&amp;sig=<signature>>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

예제: Azure Key Vault에 계정 키 저장

{
    "name": "AzureTableStorageLinkedService",
    "properties": {
        "type": "AzureTableStorage",
        "typeProperties": {
            "sasUri": {
                "type": "SecureString",
                "value": "<SAS URI of the Azure Storage resource without token e.g. https://<account>.table.core.windows.net/<table>>"
            },
            "sasToken": { 
                "type": "AzureKeyVaultSecret", 
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>", 
                    "type": "LinkedServiceReference" 
                }, 
                "secretName": "<secretName>" 
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

공유 액세스 서명 URI를 만들 때 고려해야 할 사항은 다음과 같습니다.

  • 연결된 서비스(읽기, 쓰기, 읽기/쓰기)를 사용하는 방법에 따라 개체에 대한 적절한 읽기/쓰기 권한을 설정합니다.
  • 만료 시간을 적절하게 설정합니다. Storage 개체에 대한 액세스가 파이프라인의 활성 기간 내에 만료되지 않도록 합니다.
  • URI는 필요에 따라 적절한 테이블 수준에서 만들어야 합니다.

데이터 세트 속성

데이터 세트 정의에 사용할 수 있는 섹션 및 속성의 전체 목록은 데이터 세트 문서를 참조하세요. 이 섹션에서는 Azure Table 데이터 세트에서 지원되는 속성의 목록을 제공합니다.

Azure Table 간에 데이터를 복사하려면 데이터 세트의 type 속성을 AzureTable로 설정합니다. 다음과 같은 속성이 지원됩니다.

속성 설명 필수
type 데이터 세트의 type 속성은 AzureTable로 설정해야 합니다.
tableName 연결된 서비스에서 참조하는 Table Storage 데이터베이스 인스턴스의 테이블 이름입니다.

예제:

{
    "name": "AzureTableDataset",
    "properties":
    {
        "type": "AzureTable",
        "typeProperties": {
            "tableName": "MyTable"
        },
        "schema": [],
        "linkedServiceName": {
            "referenceName": "<Azure Table storage linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

서비스에 의한 스키마 유추

Azure Table과 같은 스키마가 없는 데이터 저장소의 경우 서비스는 다음 방법 중 하나로 스키마를 유추합니다.

  • 복사 작업에서 열 매핑을 지정하는 경우 서비스는 원본 측 열 목록을 사용하여 데이터를 검색합니다. 이 경우 열 값이 행에 포함되어 있지 않으면 null 값이 제공됩니다.
  • 복사 작업에서 열 매핑을 지정하지 않으면 서비스는 데이터의 첫 번째 행을 사용하여 스키마를 유추합니다. 이 경우 전체 스키마가 첫 번째 행에 포함되어 있지 않으면(예: 일부 열에 null 값이 있음) 복사 작업의 결과에서 일부 열이 누락됩니다.

복사 작업 속성

작업 정의에 사용할 수 있는 섹션 및 속성의 전체 목록은 파이프라인 문서를 참조하세요. 이 섹션에서는 Azure Table 원본 및 싱크에서 지원되는 속성 목록을 제공합니다.

Azure Table을 원본 형식으로

Azure Table에서 데이터를 복사하려면 복사 작업의 원본 형식을 AzureTableSource로 설정합니다. 복사 작업 원본 섹션에서 지원되는 속성은 다음과 같습니다.

속성 설명 필수
type 복사 활동 source의 type 속성은 AzureTableSource로 설정해야 합니다.
AzureTableSourceQuery 사용자 지정 Table Storage 쿼리를 사용하여 데이터를 읽습니다.
원본 쿼리는 Azure Table Storage에서 지원하는 $filter 쿼리 옵션의 직접 맵입니다. 이 문서에서 구문에 대해 자세히 알아보고 다음 azureTableSourceQuery 예 섹션에 있는 예를 참조하세요.
아니요
azureTableSourceIgnoreTableNotFound 테이블의 예외가 존재하지 않도록 허용할지 여부를 나타냅니다.
허용되는 값은 TrueFalse(기본값)입니다.
아니요

azureTableSourceQuery 예제

참고 항목

Azure Table 쿼리 작업은 Azure Table service에서 적용된 대로 30초 후에 시간 초과됩니다. 쿼리 디자인 문서에서 쿼리를 최적화하는 방법을 알아보세요.

날짜/시간 형식 열에 대해 데이터를 필터링하려는 경우 다음 예제를 참조하세요.

"azureTableSourceQuery": "LastModifiedTime gt datetime'2017-10-01T00:00:00' and LastModifiedTime le datetime'2017-10-02T00:00:00'"

문자열 형식 열에 대해 데이터를 필터링하려는 경우 다음 예제를 참조하세요.

"azureTableSourceQuery": "LastModifiedTime ge '201710010000_0000' and LastModifiedTime le '201710010000_9999'"

파이프라인 매개 변수를 사용하는 경우 이전 샘플에 따라 날짜/시간 값을 적절한 형식으로 캐스팅합니다.

Azure Table을 싱크 형식으로

Azure 테이블로 데이터를 복사하려면 복사 작업의 싱크 형식을 AzureTableSink로 설정합니다. 복사 작업 싱크 섹션에서 지원되는 속성은 다음과 같습니다.

속성 설명 필수
type 복사 활동 sink의 type 속성은 AzureTableSink로 설정해야 합니다.
azureTableDefaultPartitionKeyValue 싱크에서 사용할 수 있는 기본 파티션 키 값입니다. 아니요
azureTablePartitionKeyName 값이 파티션 키로 사용되는 열의 이름을 지정합니다. 지정하지 않으면 "AzureTableDefaultPartitionKeyValue"가 파티션 키로 사용됩니다. 아니요
azureTableRowKeyName 열 값이 행 키로 사용되는 열의 이름을 지정합니다. 지정하지 않으면 각 행에 GUID를 사용합니다. 아니요
azureTableInsertType Azure Table에 데이터를 삽입하는 모드입니다. 이 속성은 출력 테이블에서 파티션 및 행 키가 일치하는 기존 행의 값을 바꿀지 또는 병합할지 제어합니다.

허용되는 값은 merge(기본값) 및 replace입니다.

이 설정은 테이블 수준이 아닌 행 수준에 적용됩니다. 두 옵션 모두 출력 테이블에서 입력에 존재하지 않는 행을 삭제하지 않습니다. merge 및 replace 설정이 작동하는 방법을 알아보려면 Insert Or Merge Entity(엔터티 삽입 또는 병합) 및 Insert Or Replace Entity(엔터티 삽입 또는 바꾸기)를 참조하세요.
아니요
writeBatchSize writeBatchSize 또는 writeBatchTimeout에 도달하면 Azure Table에 데이터를 삽입합니다.
허용되는 값은 정수(행 수)입니다.
아니요(기본값: 10,000)
writeBatchTimeout writeBatchSize 또는 writeBatchTimeout에 도달하면 Azure Table에 데이터를 삽입합니다.
허용되는 값은 시간 범위입니다. 예를 들어 "00:20:00"(20 분)입니다.
아니요(기본값: 90초 - 스토리지 클라이언트의 기본 시간 제한)
 maxConcurrentConnections 작업 실행 중 데이터 저장소에 설정된 동시 연결의 상한입니다. 동시 연결을 제한하려는 경우에만 값을 지정합니다.   아님

예제:

"activities":[
    {
        "name": "CopyToAzureTable",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Azure Table output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "AzureTableSink",
                "azureTablePartitionKeyName": "<column name>",
                "azureTableRowKeyName": "<column name>"
            }
        }
    }
]

azureTablePartitionKeyName

대상 열을 azureTablePartitionKeyName으로 사용할 수 있기 전에 "translator" 속성을 사용하여 원본 열을 대상 열에 매핑합니다.

다음 예제에서는 DivisionID 원본 열이 DivisionID 대상 열에 매핑됩니다.

"translator": {
    "type": "TabularTranslator",
    "columnMappings": "DivisionID: DivisionID, FirstName: FirstName, LastName: LastName"
}

"DivisionID"가 파티션 키로 지정됩니다.

"sink": {
    "type": "AzureTableSink",
    "azureTablePartitionKeyName": "DivisionID"
}

Azure 테이블에 대한 데이터 형식 매핑

Azure Table 간에 데이터를 복사하는 경우 Azure Table 데이터 형식에서 서비스 내에서 내부적으로 사용되는 중간 데이터 형식으로 다음 매핑이 사용됩니다. 복사 활동에서 원본 스키마와 데이터 형식을 싱크에 매핑하는 방법에 대한 자세한 내용은 스키마 및 데이터 형식 매핑을 참조하세요.

Azure Table에서 데이터를 이동하는 경우 Azure Table OData 형식에서 .NET 형식으로 또는 그 반대로 다음과 같은 Azure Table에서 정의된 매핑이 사용됩니다.

Azure Table 데이터 형식 중간 서비스 데이터 형식 세부 정보
Edm.Binary byte[] 바이트 배열은 최대 64KB입니다.
Edm.Boolean bool 부울 값입니다.
Edm.DateTime DateTime UTC(협정 세계시)로 표현되는 64비트 값입니다. 지원되는 DateTime 범위는 UTC 1601년 1월 1일 자정에 시작합니다. 범위는 9999년 12월 31일 끝납니다.
Edm.Double double 64비트 부동 소수점 값입니다.
Edm.Guid GUID 전역적으로 고유한 128 비트 식별자입니다.
Edm.Int32 Int32 32비트 정수입니다.
Edm.Int64 Int64 64비트 정수입니다.
Edm.String 문자열 UTF-16으로 인코딩된 값입니다. 문자열 값은 최대 64KB입니다.

조회 작업 속성

속성에 대한 자세한 내용을 보려면 조회 작업을 확인하세요.

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