다음을 통해 공유


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

적용 대상: Azure Data Factory Azure Synapse Analytics

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

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

Important

새 MongoDB 커넥터는 향상된 네이티브 MongoDB 지원을 제공합니다. 솔루션에서 레거시 MongoDB 커넥터를 사용하는 경우 이전 버전과의 호환성을 위해 현재 상태로만 지원되는 경우 MongoDB 커넥터(레거시) 문서를 참조하세요.

지원되는 기능

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

지원되는 기능 IR
복사 작업(원본/싱크) 3,4

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

원본/싱크로 지원되는 데이터 저장소 목록은 지원되는 데이터 저장소 표를 참조하세요.

특히 이 MongoDB 커넥터는 버전 4.2까지 지원합니다. 작업에 4.2보다 최신 버전이 필요한 경우, 더욱 포괄적인 지원과 기능을 제공하는 MongoDB Atlas 커넥터가 있는 MongoDB Atlas를 사용하는 것이 좋습니다.

필수 조건

데이터 저장소가 온-프레미스 네트워크, Azure 가상 네트워크 또는 Amazon Virtual Private Cloud 내에 있는 경우 자체 호스팅된 통합 런타임을 구성하여 연결해야 합니다.

데이터 저장소가 관리형 클라우드 데이터 서비스인 경우 Azure Integration Runtime을 사용할 수 있습니다. 액세스가 방화벽 규칙에서 승인된 IP로 제한되는 경우 허용 목록에 Azure Integration Runtime IP를 추가할 수 있습니다.

또한 Azure Data Factory의 관리형 가상 네트워크 통합 런타임 기능을 사용하면 자체 호스팅 통합 런타임을 설치하고 구성하지 않고도 온-프레미스 네트워크에 액세스할 수 있습니다.

Data Factory에서 지원하는 네트워크 보안 메커니즘 및 옵션에 대한 자세한 내용은 데이터 액세스 전략을 참조하세요.

시작하기

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

UI를 사용하여 MongoDB에 연결된 서비스 만들기

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

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

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

    MongoDB 커넥터를 선택합니다.

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

    MongoDB에 연결된 서비스를 구성합니다.

커넥터 구성 세부 정보

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

연결된 서비스 속성

MongoDB 연결된 서비스에 다음 속성이 지원됩니다.

속성 설명 필수
type 형식 속성은 MongoDbV2로 설정해야 합니다.
connectionString MongoDB 연결 문자열을 지정합니다(예: mongodb://[username:password@]host[:port][/[database][?options]]). 자세한 내용은 연결 문자열에 대한 MongoDB 설명서를 참조하세요.

Azure Key Vault에 연결 문자열을 넣을 수도 있습니다. 자세한 내용은 Azure Key Vault의 자격 증명 저장을 참조하세요.
database 액세스하려는 데이터베이스 이름입니다.
connectVia 데이터 저장소에 연결하는 데 사용할 Integration Runtime입니다. 필수 구성 요소 섹션에서 자세히 알아보세요. 지정하지 않으면 기본 Azure Integration Runtime을 사용합니다. 아니요

예제:

{
    "name": "MongoDBLinkedService",
    "properties": {
        "type": "MongoDbV2",
        "typeProperties": {
            "connectionString": "mongodb://[username:password@]host[:port][/[database][?options]]",
            "database": "myDatabase"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

데이터 세트 속성

데이터 세트 정의에 사용할 수 있는 섹션 및 속성의 전체 목록은 데이터 세트 및 연결된 서비스를 참조하세요. MongoDB 데이터 세트에 대해 다음 속성을 지원합니다.

속성 설명 필수
type 데이터 세트의 형식 속성을 MongoDbV2Collection으로 설정해야 합니다.
collectionName MongoDB 데이터베이스에 있는 컬렉션의 이름입니다.

예제:

{
    "name": "MongoDbDataset",
    "properties": {
        "type": "MongoDbV2Collection",
        "typeProperties": {
            "collectionName": "<Collection name>"
        },
        "schema": [],
        "linkedServiceName": {
            "referenceName": "<MongoDB linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

복사 작업 속성

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

MongoDB를 원본으로

복사 작업 source 섹션에서 다음 속성이 지원됩니다.

속성 설명 필수
type 복사 작업 원본의 형식 속성을 MongoDbV2Source로 설정해야 합니다.
필터링 쿼리 연산자를 사용하여 선택 영역 필터를 지정합니다. 컬렉션의 모든 문서를 반환하려면 이 매개 변수를 생략하거나 빈 문서({})를 전달합니다. 아니요
cursorMethods.project 프로젝션에 대한 문서에서 반환할 필드를 지정합니다. 일치하는 문서에서 모든 필드를 반환하려면 이 매개 변수를 생략합니다. 아니요
cursorMethods.sort 쿼리가 일치하는 문서를 반환하는 순서를 지정합니다. cursor.sort()를 참조하세요. 아니요
cursorMethods.limit 서버에서 반환하는 문서의 최대 수를 지정합니다. cursor.limit()를 참조하세요. 아니요
cursorMethods.skip MongoDB가 결과를 반환하기 시작하는 위치에서 건너뛸 문서 수를 지정합니다. cursor.skip()을 참조하세요. 아니요
batchSize MongoDB 인스턴스의 응답을 각각 일괄 처리로 반환할 문서 수를 지정합니다. 대부분의 경우 일괄 처리 크기를 수정해도 사용자 또는 애플리케이션에 영향이 없습니다. Azure Cosmos DB는 각 일괄 처리가 문서 크기의 batchSize 수의 합인 40MB를 초과할 수 없도록 제한하므로 문서 크기가 대규모인 경우 이 값을 줄입니다. 아니요
(기본값은 100)

이 서비스는 Strict 모드에서 BSON 문서 사용을 지원합니다. 필터 쿼리가 Shell 모드가 아닌 Strict 모드에 있는지 확인합니다. 자세한 설명은 MongoDB 설명서를 참조하세요.

예제:

"activities":[
    {
        "name": "CopyFromMongoDB",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<MongoDB input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "MongoDbV2Source",
                "filter": "{datetimeData: {$gte: ISODate(\"2018-12-11T00:00:00.000Z\"),$lt: ISODate(\"2018-12-12T00:00:00.000Z\")}, _id: ObjectId(\"5acd7c3d0000000000000000\") }",
                "cursorMethods": {
                    "project": "{ _id : 1, name : 1, age: 1, datetimeData: 1 }",
                    "sort": "{ age : 1 }",
                    "skip": 3,
                    "limit": 3
                }
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

MongoDB를 싱크로

복사 작업 sink 섹션에서 지원되는 속성은 다음과 같습니다.

속성 설명 필수
type 복사 작업 싱크의 type 속성을 MongoDbV2Sink로 설정해야 합니다.
writeBehavior MongoDB에 데이터를 쓰는 방법을 설명합니다. 허용되는 값은 insertupsert입니다.

upsert 동작은 동일한 _id의 문서가 이미 존재하는 경우 문서를 바꾸는 것으로, 존재하지 않는 경우 문서를 삽입하는 것입니다.

참고: _id가 원래 문서 또는 열 매핑에 지정되지 않은 경우 이 서비스는 문서에 대한 _id를 자동으로 생성합니다. 즉, upsert가 예상대로 작동하려면 문서에 ID가 있는지 확인해야 합니다.
아니요
(기본값: insert)
writeBatchSize writeBatchSize 속성은 각 일괄 처리에서 작성할 문서의 크기를 제어합니다. 성능을 개선하기 위해 writeBatchSize에 대한 값을 늘리고 문서 크기가 커지는 경우 값을 줄여 볼 수 있습니다. 아니요
(기본값: 10,000)
writeBatchTimeout 시간 초과되기 전에 배치 삽입 작업을 완료하기 위한 대기 시간입니다. 허용되는 값은 시간 범위입니다. 아니요
(기본값은 00:30:00 - 30분)

JSON 문서를 그대로 가져오려면 JSON 문서 가져오기 또는 내보내기 섹션을 참조하세요. 테이블 형식 데이터를 복사하려면 스키마 매핑을 참조하세요.

예제

"activities":[
    {
        "name": "CopyToMongoDB",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Document DB output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "MongoDbV2Sink",
                "writeBehavior": "upsert"
            }
        }
    }
]

JSON 문서 가져오기 및 내보내기

이 MongoDB 커넥터를 사용하여 다음을 쉽게 수행할 수 있습니다.

  • 두 MongoDB 컬렉션 간에 데이터를 있는 그대로 복사
  • Azure Cosmos DB, Azure Blob Storage, Azure Data Lake Store, 기타 지원되는 파일 기반 저장소를 포함하여 다양한 원본에서 MongoDB로 JSON 문서를 가져옵니다.
  • MongoDB 컬렉션에서 다양한 파일 기반 저장소로 JSON 문서 내보내기

이러한 스키마 독립적 복사를 완수하려면 데이터 세트 및 복사 작업의 스키마 매핑에서 "구조"(스키마라고도 함) 섹션을 건너뛰세요.

스키마 매핑

데이터를 MongoDB에서 테이블 형식 싱크로 또는 그 반대로 복사하려면 스키마 매핑을 참조하세요.

MongoDB 연결 서비스 업그레이드

연결된 서비스 및 관련 쿼리를 업그레이드하는 데 도움이 되는 단계는 다음과 같습니다.

  1. 새로운 MongoDB 연결 서비스를 만들고 연결 서비스 속성을 참조하여 구성합니다.

  2. 이전 MongoDB 연결된 서비스를 참조하는 파이프라인에서 SQL 쿼리를 사용하는 경우 해당 쿼리를 동등한 MongoDB 쿼리로 바꿉니다. 대체 예는 다음 표를 참조하세요.

    SQL query 동등한 MongoDB 쿼리
    SELECT * FROM users db.users.find({})
    SELECT username, age FROM users db.users.find({}, {username: 1, age: 1})
    SELECT username AS User, age AS Age, statusNumber AS Status, CASE WHEN Status = 0 THEN "Pending" CASE WHEN Status = 1 THEN "Finished" ELSE "Unknown" END AS statusEnum LastUpdatedTime + interval '2' hour AS NewLastUpdatedTime FROM users db.users.aggregate([{ $project: { _id: 0, User: "$username", Age: "$age", Status: "$statusNumber", statusEnum: { $switch: { branches: [ { case: { $eq: ["$Status", 0] }, then: "Pending" }, { case: { $eq: ["$Status", 1] }, then: "Finished" } ], default: "Unknown" } }, NewLastUpdatedTime: { $add: ["$LastUpdatedTime", 2 * 60 * 60 * 1000] } } }])
    SELECT employees.name, departments.name AS department_name FROM employees LEFT JOIN departments ON employees.department_id = departments.id; db.employees.aggregate([ { $lookup: { from: "departments", localField: "department_id", foreignField: "_id", as: "department" } }, { $unwind: "$department" }, { $project: { _id: 0, name: 1, department_name: "$department.name" } } ])

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