MongoDB에서 외부 데이터에 액세스하도록 PolyBase 구성

적용 대상:SQL Server

이 문서에서는 SQL Server 인스턴스에서 PolyBase를 사용하여 MongoDB에서 외부 데이터를 쿼리하는 방법을 설명합니다.

전제 조건

PolyBase를 설치하지 않은 경우 PolyBase 설치를 참조하세요.

데이터베이스 범위 자격 증명을 만들기 전에 자격 증명을 보호하려면 데이터베이스에 마스터 키가 있어야 합니다. 자세한 내용은 CREATE MASTER KEY를 참조하세요.

MongoDB 외부 데이터 원본 구성

MongoDB 데이터 원본에서 데이터를 쿼리하려면 외부 데이터를 참조할 외부 테이블을 만들어야 합니다. 이 섹션에서는 이러한 외부 테이블을 만드는 샘플 코드를 제공합니다.

이 섹션에서는 다음 Transact-SQL 명령이 사용됩니다.

  1. MongoDB 소스에 액세스하기 위한 데이터베이스 범위 자격 증명을 만듭니다.

    다음 스크립트는 데이터베이스 범위 자격 증명을 만듭니다. 스크립트를 실행하기 전에 해당 환경의 스크립트를 업데이트합니다.

    • 자격 증명의 이름으로 바꿉 <credential_name> 습니다.
    • <username>을 외부 소스의 사용자 이름으로 바꿉니다.
    • <password>를 적절한 암호로 바꿉니다.
    CREATE DATABASE SCOPED CREDENTIAL [<credential_name>] WITH IDENTITY = '<username>', Secret = '<password>';
    

    Important

    PolyBase용 MongoDB ODBC 커넥터는 Kerberos 인증이 아닌 기본 인증만 지원합니다.

  2. 외부 데이터 원본을 만듭니다.

    다음 스크립트는 외부 데이터 원본을 만듭니다. 참조는 CREATE EXTERNAL DATA SOURCE를 참조 하세요. 스크립트를 실행하기 전에 해당 환경의 스크립트를 업데이트합니다.

    • 위치를 업데이트합니다. 사용자 환경에 맞게 <server><port> 설정합니다.
    • 이전 단계에서 만든 자격 증명의 이름으로 바꿉 <credential_name> 습니다.
    • 필요에 따라 외부 원본에 대한 푸시다운 계산을 지정 PUSHDOWN = ON 하거나 PUSHDOWN = OFF 지정할 수 있습니다.
    CREATE EXTERNAL DATA SOURCE external_data_source_name
    WITH (LOCATION = '<mongodb://<server>[:<port>]>'
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
    [ [ , ] PUSHDOWN = { ON | OFF } ])
    [ ; ]
    
  3. MongoDB에서 외부 스키마를 쿼리합니다.

    Azure Data Studio용 데이터 가상화 확장을 사용하여 PolyBase ODBC Driver for MongoDB 드라이버에서 검색한 스키마를 기반으로 CREATE EXTERNAL TABLE 문을 연결하고 생성할 수 있습니다. 시스템 저장 프로시저 sp_data_source_objects(Transact-SQL)의 출력에 따라 스크립트를 수동으로 사용자 지정할 수도 있습니다. Azure Data Studio용 데이터 가상화 확장 및 sp_data_source_table_columns는 동일한 내부 저장 프로시저를 사용하여 외부 스키마를 쿼리합니다.

    배열이 포함된 MongoDB 컬렉션에 대한 외부 테이블을 만들려면 Azure Data Studio에 데이터 가상화 확장을 사용하는 것이 좋습니다. 평면화 작업은 드라이버에 의해 자동으로 수행됩니다. sp_data_source_table_columns 저장 프로시저도 MongoDB 드라이버용 PolyBase ODBC 드라이버를 통해 자동으로 평면화를 수행합니다.

  4. 외부 테이블을 만듭니다.

    Azure Data Studio데이터 가상화 확장을 사용하는 경우 CREATE EXTERNAL TABLE 문이 생성되므로 이 단계를 건너뛸 수 있습니다. 스키마를 수동으로 제공하려면 다음 샘플 스크립트를 사용하여 외부 테이블을 만듭니다. 외부 테이블 만들기를 참조하세요.

    스크립트를 실행하기 전에 사용자 환경에 맞게 업데이트합니다.

    • 필드를 이름, 데이터 정렬로 업데이트하고, 컬렉션인 경우 컬렉션 이름과 필드 이름을 지정합니다. 예제에서 friends는 사용자 지정 데이터 형식입니다.
    • 위치를 업데이트합니다. 데이터베이스 이름과 테이블 이름을 설정합니다. 세 부분으로 구성된 이름은 허용되지 않으므로, system.profile 테이블의 경우 이름을 만들 수 없습니다. 또한 보기에서 메타데이터를 가져올 수 없기 때문에 보기를 지정할 수 없습니다.
    • 데이터 원본을 이전 단계에서 만든 이름으로 업데이트합니다.
    CREATE EXTERNAL TABLE [MongoDbRandomData](
      [_id] NVARCHAR(24) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
      [RandomData_friends_id] INT,
      [RandomData_tags] NVARCHAR(MAX) COLLATE SQL_Latin1_General_CP1_CI_AS)
    WITH (
      LOCATION='MyDb.RandomData',
      DATA_SOURCE=[MongoDb])
    
  5. 선택 사항: 외부 테이블에 대한 통계를 만듭니다.

    최적의 쿼리 성능을 위해 외부 테이블 열, 특히 조인, 필터 및 집계에 사용되는 통계를 만드는 것이 좋습니다.

    CREATE STATISTICS statistics_name ON customer (C_CUSTKEY) WITH FULLSCAN; 
    

Important

외부 데이터 원본을 만든 후에는 CREATE EXTERNAL TABLE 명령을 사용하여 해당 원본에 대해 쿼리 가능 테이블을 만들 수 있습니다.

예를 들어 MongoDB에 대한 외부 테이블 만들기를 참조하세요.

MongoDB 연결 옵션

MongoDB 연결 옵션에 대한 자세한 내용은 MongoDB 설명서: 연결 문자열 URI 형식을 참조 하세요.

평면화

평면화는 MongoDB 문서 컬렉션에서 중첩되고 반복되는 데이터에 사용할 수 있습니다. 사용자는 중첩 및/또는 반복된 데이터가 있을 수 있는 MongoDB 문서 컬렉션에 대해 관계형 스키마를 사용하도록 설정하고 create an external table 명시적으로 지정해야 합니다. JSON 중첩/반복 데이터 형식은 다음과 같이 평면화됩니다.

  • 개체: 중괄호로 묶인 순서가 지정되지 않은 키/값 컬렉션(중첩)

    • SQL Server는 각 개체 키에 대한 테이블 열을 생성합니다.

      • 열 이름: objectname_keyname
  • 배열: 쉼표로 구분한 정렬된 값을 대괄호로 묶습니다(반복).

    • SQL Server는 각 배열 항목에 대해 새 테이블 행을 추가합니다.

    • SQL Server는 배열 항목 인덱스를 저장하기 위해 배열당 1개의 열을 만듭니다.

      • 열 이름: arrayname_index

      • 데이터 형식: bigint

이 기술에는 몇 가지 잠재적인 문제가 있으며, 그 중 두 가지는 다음과 같습니다.

  • 빈 반복 필드는 동일한 레코드의 플랫 필드에 포함된 데이터를 효과적으로 마스킹합니다.

  • 반복되는 필드가 여러 개 있으면 생성되는 행 수가 폭발적으로 증가할 수 있습니다.

예를 들어 SQL Server는 비관계형 JSON 형식에 저장된 MongoDB 예제 데이터 세트 식당 컬렉션을 평가합니다. 각 식당에는 중첩된 주소 필드와 서로 다른 날에 할당된 다양한 성적이 있습니다. 아래 그림에서는 중첩된 주소와 중첩된 반복 성적이 있는 일반적인 레스토랑을 보여 줍니다.

MongoDB flattening

개체 주소는 다음과 같이 평면화됩니다.

  • 중첩 필드 restaurant.address.buildingrestaurant.address_building이 됨
  • 중첩 필드 restaurant.address.coordrestaurant.address_coord이 됨
  • 중첩 필드 restaurant.address.streetrestaurant.address_street이 됨
  • 중첩 필드 restaurant.address.zipcoderestaurant.address_zipcode이 됨

배열 등급은 다음과 같이 평면화됩니다.

grades_date grades_grade games_score
1393804800000 A 2
1378857600000 A 6
135898560000 A 10
1322006400000 A 9
1299715200000 b 14

Cosmos DB 연결

Cosmos DB Mongo API 및 Mongo DB PolyBase 커넥터를 사용하여 Cosmos DB 인스턴스외부 테이블을 만들 수 있습니다. 이 작업은 위에 나열된 것과 동일한 단계를 수행하여 수행됩니다. 데이터베이스 범위 자격 증명, 서버 주소, 포트 및 위치 문자열이 Cosmos DB 서버의 자격 증명을 반영하는지 확인합니다.

다음 예에서는 다음 매개 변수를 사용하여 외부 데이터 원본을 만듭니다.

매개 변수
속성 external_data_source_name
Service mongodb0.example.com
인스턴스 27017
복제본 세트 myRepl
TLS true
푸시다운 계산 On
CREATE EXTERNAL DATA SOURCE external_data_source_name
    WITH (LOCATION = 'mongodb://mongodb0.example.com:27017',
    CONNECTION_OPTIONS = 'replicaSet=myRepl; tls=true',
    PUSHDOWN = ON ,
    CREDENTIAL = credential_name);

다음 단계

다양한 데이터 원본에 외부 데이터 원본 및 외부 테이블을 만드는 방법에 대한 자세한 자습서는 PolyBase Transact-SQL 참조를 참조하세요.

PolyBase에 대한 자세한 내용은 SQL Server PolyBase 개요를 참조하세요.