Azure Data Factory 및 Synapse Analytics를 사용하여 Azure Database for MySQL에서 데이터 복사 및 변환

적용 대상: Azure Data Factory Azure Synapse Analytics

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

이 문서에서는 Azure Data Factory 또는 Synapse Analytics 파이프라인에서 복사 작업을 사용하여 Azure Database for MySQL 간에 데이터를 복사하고 Data Flow를 사용하여 Azure Database for MySQL에서 데이터를 변환하는 방법을 간략하게 설명합니다. 자세한 내용은 Azure Data FactorySynapse Analytics의 소개 문서를 참조하세요.

이 커넥터는 다음 전용입니다.

온-프레미스 또는 클라우드에 있는 일반 MySQL 데이터베이스에서 데이터를 복사하려면 MySQL 커넥터를 사용합니다.

필수 조건

이 빠른 시작에는 시작점으로 아래에 언급된 다음 리소스 및 구성이 필요합니다.

  • 공용 액세스 또는 프라이빗 엔드포인트가 있는 MySQL 단일 서버 또는 MySQL 유연한 서버용 기존 Azure 데이터베이스.
  • MySQL 서버의 네트워킹 페이지에서 Azure 내의 모든 Azure 서비스에서 이 서버로의 공용 액세스 허용을 활성화합니다. 이렇게 하면 데이터 팩터리 스튜디오를 사용할 수 있습니다.

지원되는 기능

이 Azure Database for MySQL 커넥터는 다음 기능에 대해 지원됩니다.

지원되는 기능 IR 관리형 프라이빗 엔드포인트
복사 작업(원본/싱크) ① ②
매핑 데이터 흐름(원본/싱크)
조회 작업 ① ②

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

시작하기

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

UI를 사용하여 Azure Database for MySQL에 연결된 서비스 만들기

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

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

  2. MySQL을 검색하고 Azure Database for MySQL 커넥터를 선택합니다.

    Select the Azure Database for MySQL connector.

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

    Configure a linked service to Azure Database for MySQL.

커넥터 구성 세부 정보

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

연결된 서비스 속성

Azure Database for MySQL 연결된 서비스에 다음 속성이 지원됩니다.

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

일반적인 연결 문자열은 Server=<server>.mysql.database.azure.com;Port=<port>;Database=<database>;UID=<username>;PWD=<password>입니다. 사례에 따라 다음과 같은 더 많은 속성을 설정할 수 있습니다.

속성 설명 Options Required
SSLMode 이 옵션은 MySQL에 연결할 때 드라이버에서 TLS 암호화 및 확인을 사용하는지 여부를 지정합니다. 예: SSLMode=<0/1/2/3/4> 사용 안 함(0) / 기본 설정(1) (기본값) / 필요(2) / VERIFY_CA(3) / VERIFY_IDENTITY(4) 아니요
UseSystemTrustStore 이 옵션은 시스템 신뢰 저장소 또는 지정된 PEM 파일의 CA 인증서를 사용할지 여부를 지정합니다. 예: UseSystemTrustStore=<0/1>; 사용(1) / 사용 안 함(0)(기본값) 아니요

예제:

{
    "name": "AzureDatabaseForMySQLLinkedService",
    "properties": {
        "type": "AzureMySql",
        "typeProperties": {
            "connectionString": "Server=<server>.mysql.database.azure.com;Port=<port>;Database=<database>;UID=<username>;PWD=<password>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

예제: Azure Key Vault에 암호 저장

{
    "name": "AzureDatabaseForMySQLLinkedService",
    "properties": {
        "type": "AzureMySql",
        "typeProperties": {
            "connectionString": "Server=<server>.mysql.database.azure.com;Port=<port>;Database=<database>;UID=<username>;",
            "password": { 
                "type": "AzureKeyVaultSecret", 
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>", 
                    "type": "LinkedServiceReference" 
                }, 
                "secretName": "<secretName>" 
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

데이터 세트 속성

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

Azure Database for MySQL에서 데이터를 복사하려면 데이터 세트의 형식 속성을 AzureMySqlTable로 설정합니다. 다음과 같은 속성이 지원됩니다.

속성 설명 필수
type 데이터 세트의 형식 속성을 AzureMySqlTable로 설정해야 합니다.
tableName MySQL 데이터베이스의 테이블 이름입니다. 아니요(작업 원본에서 "query"가 지정된 경우)

예제

{
    "name": "AzureMySQLDataset",
    "properties": {
        "type": "AzureMySqlTable",
        "linkedServiceName": {
            "referenceName": "<Azure MySQL linked service name>",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "tableName": "<table name>"
        }
    }
}

복사 작업 속성

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

Azure Database for MySQL을 원본으로

Azure Database for MySQL에서 데이터를 복사하기 위해 복사 작업 원본 섹션에서 지원하는 속성은 다음과 같습니다.

속성 설명 필수
type 복사 작업 원본의 형식 속성을 AzureMySqlSource로 설정해야 합니다.
query 사용자 지정 SQL 쿼리를 사용하여 데이터를 읽습니다. 예: "SELECT * FROM MyTable" 아니요(데이터 세트의 "tableName"이 지정된 경우)
queryCommandTimeout 쿼리 요청 전의 대기 시간이 초과되었습니다. 기본값은 120분(02:00:00)입니다. 아니요

예제:

"activities":[
    {
        "name": "CopyFromAzureDatabaseForMySQL",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Azure MySQL input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "AzureMySqlSource",
                "query": "<custom query e.g. SELECT * FROM MyTable>"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Azure Database for MySQL을 싱크로

Azure Database for MySQL로 데이터를 복사하기 위해 복사 작업 싱크 섹션에서 지원하는 속성은 다음과 같습니다.

속성 설명 필수
type 복사 작업 싱크의 형식 속성은 AzureMySqlSink로 설정해야 합니다.
preCopyScript 각 실행 시 Azure Database for MySQL에 데이터를 쓰기 전에 실행할 복사 작업에 대한 SQL 쿼리를 지정합니다. 이 속성을 사용하여 미리 로드된 데이터를 정리할 수 있습니다. 아니요
writeBatchSize 버퍼 크기가 writeBatchSize에 도달하면 Azure Database for MySQL 테이블에 데이터를 삽입합니다.
허용되는 값은 행 수를 나타내는 정수입니다.
아니요(기본값: 10,000)
writeBatchTimeout 시간이 초과되기 전에 완료하려는 배치 삽입 작업을 위한 대기 시간입니다.
허용되는 값은 시간 범위입니다. 예를 들어 "00:30:00"(30분)입니다.
아니요(기본값: 00:00:30)

예제:

"activities":[
    {
        "name": "CopyToAzureDatabaseForMySQL",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Azure MySQL output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "AzureMySqlSink",
                "preCopyScript": "<custom SQL script>",
                "writeBatchSize": 100000
            }
        }
    }
]

매핑 데이터 흐름 속성

매핑 데이터 흐름에서 데이터를 변환하는 경우 Azure Database for MySQL에서 테이블에 대한 읽기 및 쓰기를 수행할 수 있습니다. 자세한 내용은 매핑 데이터 흐름에서 원본 변환싱크 변환을 참조하세요. Azure Database for MySQL 데이터 세트 또는 인라인 데이터 세트를 원본 및 싱크 형식으로 사용하도록 선택할 수 있습니다.

원본 변환

다음 표에서는 Azure Database for MySQL 원본에서 지원하는 속성을 나열합니다. 이러한 속성은 원본 옵션 탭에서 편집할 수 있습니다.

이름 설명 필수 허용된 값 데이터 흐름 스크립트 속성
테이블 테이블을 입력으로 선택하는 경우 데이터 흐름은 데이터 세트에 지정된 테이블에서 모든 데이터를 가져옵니다. 아니요 - (인라인 데이터 세트에만 해당)
tableName
쿼리 쿼리를 입력으로 선택하는 경우 원본에서 데이터를 가져올 SQL 쿼리를 지정하면 데이터 세트에서 지정한 테이블이 재정의됩니다. 쿼리를 사용하면 테스트 또는 조회를 위한 행을 줄일 수 있습니다.

Order By 절은 지원되지 않지만 전체 SELECT FROM 문을 설정할 수 있습니다. 사용자 정의 테이블 함수를 사용할 수도 있습니다. select * from udfGetData()는 데이터 흐름에서 사용할 수 있는 테이블을 반환하는 SQL의 UDF입니다.
쿼리 예: select * from mytable where customerId > 1000 and customerId < 2000 또는 select * from "MyTable"
아니요 문자열 query
저장 프로시저 저장 프로시저를 입력으로 선택하는 경우 원본 테이블에서 데이터를 읽을 저장 프로시저의 이름을 지정하거나 새로 고침을 선택하여 서비스에 프로시저 이름을 검색하도록 요청합니다. 예(저장 프로시저를 입력으로 선택하는 경우) 문자열 procedureName
프로시저 매개 변수 저장 프로시저를 입력으로 선택하는 경우 프로시저에 설정된 순서대로 저장 프로시저에 대한 입력 매개 변수를 지정하거나 가져오기를 선택하여 @paraName 양식을 사용하여 모든 프로시저 매개 변수를 가져옵니다. 아니요 배열 inputs
Batch 크기 일괄 처리 크기를 지정하여 대량 데이터를 일괄 처리로 청크합니다. 아니요 정수 batchSize
격리 수준 다음 격리 수준 중 하나를 선택합니다.
- 커밋된 읽기
- 커밋되지 않은 읽기(기본값)
- 반복 읽기
- 직렬화 가능
- 없음(격리 수준 무시)
아니요 READ_COMMITTED
READ_UNCOMMITTED
REPEATABLE_READ
직렬화 가능
NONE
isolationLevel

Azure Database for MySQL 원본 스크립트 예

Azure Database for MySQL을 원본 형식으로 사용하는 경우 연결된 데이터 흐름 스크립트는 다음과 같습니다.

source(allowSchemaDrift: true,
    validateSchema: false,
    isolationLevel: 'READ_UNCOMMITTED',
    query: 'select * from mytable',
    format: 'query') ~> AzureMySQLSource

싱크 변환

다음 표에서는 Azure Database for MySQL 싱크에서 지원하는 속성을 나열합니다. 해당 속성은 싱크 옵션 탭에서 편집할 수 있습니다.

이름 설명 필수 허용된 값 데이터 흐름 스크립트 속성
Update 메서드 데이터베이스 대상에서 허용되는 작업을 지정합니다. 기본값은 삽입만 허용하는 것입니다.
행을 업데이트, upsert 또는 삭제하려면 해당 작업을 위해 행에 태그를 지정하는 데 행 변경 변환이 필요합니다.
true 또는 false deletable
insertable
updateable
upsertable
키 열 업데이트, upsert, 삭제의 경우 변경할 행을 결정하기 위해 키 열을 설정해야 합니다.
키로 선택한 열 이름은 후속 업데이트, upsert, 삭제의 일부로 사용됩니다. 따라서 싱크 매핑에 있는 열을 선택해야 합니다.
아니요 배열
키 열 쓰기 건너뛰기 키 열에 값을 쓰지 않으려면 “키 열 작성 건너뛰기”를 선택합니다. 아니요 true 또는 false skipKeyWrites
테이블 작업 쓰기 전에 대상 테이블에서 모든 행을 다시 만들지 또는 제거할지 여부를 결정합니다.
- None: 테이블에 대한 작업이 수행되지 않습니다.
- Recreate: 테이블이 삭제되고 다시 생성됩니다. 동적으로 새 테이블을 만드는 경우 필요합니다.
- Truncate: 대상 테이블의 모든 행이 제거됩니다.
아니요 true 또는 false recreate
truncate
Batch 크기 각 일괄 처리에 작성되는 행 수를 지정합니다. 일괄 처리 크기가 클수록 압축 및 메모리 최적화가 향상되지만 데이터를 캐시할 때 메모리 부족 예외가 발생할 위험이 있습니다. 아니요 정수 batchSize
사전 및 사후 SQL 스크립트 데이터를 싱크 데이터베이스에 기록하기 전(사전 처리)과 후(사후 처리)에 실행할 여러 줄 SQL 스크립트를 지정합니다. 아니요 문자열 preSQLs
postSQLs

  1. 여러 명령이 있는 단일 일괄 처리 스크립트는 여러 일괄 처리로 분할하는 것이 좋습니다.
  2. 단순 업데이트 횟수를 반환하는 DDL(데이터 정의 언어) 및 DML(데이터 조작 언어) 문만 일괄 처리의 일부로 실행할 수 있습니다. 일괄 처리 작업 수행의 자세한 정보
  • 증분 추출 사용: 이 옵션을 사용하여 파이프라인이 마지막으로 실행된 이후 변경된 행만 처리하도록 ADF에 지시합니다.

  • 증분 열: 증분 추출 기능을 사용하는 경우 원본 테이블에서 워터마크로 사용할 날짜/시간 또는 숫자 열을 선택해야 합니다.

  • 처음부터 읽기 시작: 증분 추출을 사용하여 이 옵션을 설정하면 증분 추출이 켜진 파이프라인의 첫 번째 실행 시 모든 행을 읽도록 ADF에 지시합니다.

Azure Database for MySQL 싱크 스크립트 예

Azure Database for MySQL을 싱크 형식으로 사용하는 경우 연결된 데이터 흐름 스크립트는 다음과 같습니다.

IncomingStream sink(allowSchemaDrift: true,
    validateSchema: false,
    deletable:false,
    insertable:true,
    updateable:true,
    upsertable:true,
    keys:['keyColumn'],
    format: 'table',
    skipDuplicateMapInputs: true,
    skipDuplicateMapOutputs: true) ~> AzureMySQLSink

조회 작업 속성

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

Azure Database for MySQL의 데이터 형식 매핑

Azure Database for MySQL에서 데이터를 복사할 때 MySQL 데이터 형식에서 서비스 내에 내부적으로 사용되는 중간 데이터 형식으로 다음 매핑이 사용됩니다. 복사 작업에서 원본 스키마 및 데이터 형식을 싱크에 매핑하는 방법에 대한 자세한 내용은 스키마 및 데이터 형식 매핑을 참조하세요.

Azure Database for MySQL 데이터 형식 중간 서비스 데이터 형식
bigint Int64
bigint unsigned Decimal
bit Boolean
bit(M), M>1 Byte[]
blob Byte[]
bool Int16
char String
date Datetime
datetime Datetime
decimal Decimal, String
double Double
double precision Double
enum String
float Single
int Int32
int unsigned Int64
integer Int32
integer unsigned Int64
long varbinary Byte[]
long varchar String
longblob Byte[]
longtext String
mediumblob Byte[]
mediumint Int32
mediumint unsigned Int64
mediumtext String
numeric Decimal
real Double
set String
smallint Int16
smallint unsigned Int32
text String
time TimeSpan
timestamp Datetime
tinyblob Byte[]
tinyint Int16
tinyint unsigned Int16
tinytext String
varchar String
year Int32

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