CREATE EXTERNAL DATA SOURCE(Transact-SQL)

SQL Server, Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, 분석 플랫폼 시스템(PDW) 또는 Azure SQL Edge를 사용하여 쿼리용 외부 데이터 원본을 만듭니다.

이 아티클에서는 원하는 SQL 제품에 대한 구문, 인수, 설명, 사용 권한 및 예제를 제공합니다.

제품 선택

다음 행에서 관심 있는 제품 이름을 선택하면 해당 제품의 정보만 표시됩니다.

개요: SQL Server 2016

적용 대상: SQL Server 2016(13.x) 이상 버전

PolyBase 쿼리에 대한 외부 데이터 원본을 만듭니다. 외부 데이터 원본은 연결을 설정하고 다음과 같은 기본 사용 사례를 지원하는 데 사용됩니다.

  • PolyBase를 사용하여 데이터 가상화 및 데이터 로드
  • BULK INSERT 또는 OPENROWSET를 사용한 대량 로드 작업

참고

이 구문은 SQL Server 버전마다 다릅니다. 버전 선택기 드롭다운을 사용하여 적절한 버전을 선택합니다.
SQL Server 2019(15.x)의 기능을 보려면 CREATE EXTERNAL DATA SOURCE를 참조하세요. SQL Server 2022(16.x)의 기능을 보려면 CREATE EXTERNAL DATA SOURCE를 참조하세요.

SQL Server 2016용 구문

구문 표기 규칙에 대한 자세한 내용은 Transact-SQL 구문 표기 규칙을 참조하세요.

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] TYPE = { HADOOP } ]
    [ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]

인수

data_source_name

데이터 원본에 대한 사용자 정의 이름을 지정합니다. 이름은 SQL Server의 데이터베이스 내에서 반드시 고유해야 합니다.

LOCATION = '<prefix>://<path[:port]>'

외부 데이터 원본에 대한 연결 프로토콜 및 경로를 제공합니다.

외부 데이터 원본 커넥터 위치 접두사 위치 경로 제품 / 서비스별로 지원되는 위치 인증
Cloudera CDH 또는 Hortonworks HDP hdfs <Namenode>[:port] SQL Server 2016(13.x)에서 SQL Server 2019(15.x)까지 익명 또는 기본 인증
Azure Storage 계정(V2) wasb[s] <container>@<storage_account>.blob.core.windows.net SQL Server 2016(13.x)로 시작
계층 구조 네임스페이스는 지원되지 않음
Azure Storage 계정 키

위치 경로:

  • <Namenode> = Hadoop 클러스터에 있는 Namenode의 머신 이름, 이름 서비스 URI 또는 IP 주소입니다. PolyBase는 Hadoop 클러스터에서 사용하는 모든 DNS 이름을 확인해야 합니다.
  • port = 외부 데이터 원본이 수신 대기 중인 포트입니다. Hadoop에서는 fs.defaultFS 구성 매개 변수를 사용하여 포트를 찾을 수 있습니다. 기본값은 8020입니다.
  • <container> = 데이터를 보관하는 스토리지 계정의 컨테이너입니다. 루트 컨테이너는 읽기 전용이므로 데이터를 컨테이너에 다시 쓸 수 없습니다.
  • <storage_account> = Azure 리소스의 스토리지 계정 이름입니다.
  • <server_name> = 호스트 이름입니다.
  • <instance_name> = SQL Server 명명된 인스턴스의 이름입니다. 대상 인스턴스에서 SQL Server Browser Service가 실행 중인 경우에 사용됩니다.

위치 설정 시 추가 참고 사항 및 지침:

  • SQL Server 데이터베이스 엔진은 개체가 생성될 때 외부 데이터 원본이 존재하는지 확인하지 않습니다. 유효성을 검사하려면 외부 데이터 원본을 사용하여 외부 테이블을 만듭니다.
  • 일관된 쿼리 의미 체계를 보장하기 위해 Hadoop을 쿼리할 때 모든 테이블에 대해 동일한 외부 데이터 원본을 사용합니다.
  • wasbs는 선택 사항이지만, SQL Server 2016(13.x)에서 Azure Storage 계정에 액세스하는 데 권장됩니다. 데이터가 보안 TLS/SSL 연결을 사용하여 전송되기 때문입니다.
  • Hadoop Namenode 장애 조치(failover) 중에 PolyBase 쿼리를 성공적으로 수행하려면 Hadoop 클러스터의 Namenode에 대한 가상 IP 주소 사용을 고려하세요. 그렇지 않은 경우 ALTER EXTERNAL DATA SOURCE 명령을 실행하여 새 위치를 가리킵니다.

CREDENTIAL = credential_name

외부 데이터 원본에 대해 인증하기 위한 데이터베이스 범위 자격 증명을 지정합니다.

CREDENTIAL은 데이터 보안이 설정된 경우에만 필요합니다. 익명 액세스를 허용하는 데이터 세트에는 CREDENTIAL이 필요하지 않습니다.

데이터베이스 범위 지정 자격 증명을 만들려면 CREATE DATABASE SCOPED CREDENTIAL(Transact-SQL)을 참조하세요.

TYPE = [ HADOOP ]

구성 중인 외부 데이터 원본의 유형을 지정합니다. SQL Server 2016에서는 이 매개 변수가 항상 필요하며 HADOOP으로만 지정되어야 합니다. Cloudera CDH, Hortonworks HDP 또는 Azure Storage 계정에 대한 연결을 지원합니다. 이 매개 변수의 동작은 이후 버전의 SQL Server와 다릅니다.

TYPE = HADOOP을 사용하여 Azure Storage 계정에서 데이터를 로드하는 예제는 wasb://인터페이스를 사용하여 Azure Storage의 데이터에 액세스하는 외부 데이터 원본 만들기를 참조하세요.

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'

Cloudera CDH, Hortonworks HDP 또는 Azure Storage 계정에 연결할 때만 이 선택적 값을 구성합니다. 지원되는 Hadoop 버전의 전체 목록은 PolyBase 연결 구성(Transact-SQL)을 참조하세요.

RESOURCE_MANAGER_LOCATION이 정의되면 쿼리 최적화 프로그램은 성능 향상을 위해 비용 기반 결정을 내립니다. MapReduce 작업을 사용하여 Hadoop으로 계산을 푸시 다운할 수 있습니다. RESOURCE_MANAGER_LOCATION을 지정하면 Hadoop과 SQL Server 간에 전송되는 데이터 양을 크게 줄여 쿼리 성능을 향상시킬 수 있습니다.

리소스 관리자를 지정하지 않은 경우 Hadoop에 대한 푸시 컴퓨팅은 PolyBase 쿼리에 대해 비활성화됩니다. 푸시 다운이 활성화된 Hadoop을 참조하는 외부 데이터 원본 만들기는 구체적인 예제와 추가 지침을 제공합니다.

외부 데이터 원본을 만들 때 RESOURCE_MANAGER_LOCATION 값의 유효성이 검사되지 않습니다. 잘못된 값을 입력하면 제공된 값을 확인할 수 없으므로 푸시 다운을 시도할 때마다 실행 시 쿼리 오류가 발생할 수 있습니다.

PolyBase가 Hadoop 외부 데이터 원본에서 올바르게 작동하려면 다음 Hadoop 클러스터 구성 요소에 대한 포트가 열려 있어야 합니다.

  • HDFS 포트
    • Namenode
    • Datanode
  • 리소스 관리자
    • 작업 제출
    • 작업 기록

포트를 지정하지 않을 경우 기본값은 'hadoop 연결' 구성에 대한 현재 설정을 사용하여 선택됩니다.

Hadoop 연결 기본 Resource Manager 포트
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050
8 8032

다음 표에서는 이러한 구성 요소의 기본 포트를 보여 줍니다. Hadoop 버전 종속성과 기본 포트 할당을 사용하지 않는 사용자 지정 구성의 가능성이 있습니다.

Hadoop 클러스터 구성 요소 기본 포트
NameNode 8020
DataNode(데이터 전송, 비 권한 IPC 포트) 50010
DataNode(데이터 전송, 권한 IPC 포트) 1019
Resource Manager 작업 제출(Hortonworks 1.3) 50300
Resource Manager 작업 제출(Cloudera 4.3) 8021
Resource Manager 작업 제출(Windows의 Hortonworks 2.0, Linux의 Cloudera 5.x) 8032
Resource Manager 작업 제출(Linux의 Hortonworks 2.x, 3.0, Windows의 Hortonworks 2.1~3) 8050
Resource Manager 작업 기록 10020

사용 권한

SQL Server의 데이터베이스에 대한 CONTROL 권한이 필요합니다.

잠금

EXTERNAL DATA SOURCE 개체에 대한 공유 잠금을 수행합니다.

보안

PolyBase는 대부분의 외부 데이터 원본에 대해 프록시 기반 인증을 지원합니다. 데이터베이스 범위 자격 증명을 생성하여 프록시 계정을 만듭니다.

중요

PolyBase를 설치하고 사용하도록 설정하는 방법에 대한 자세한 내용은 Windows에 PolyBase 설치를 참조하세요.

A. Hadoop를 참조하는 외부 데이터 원본 만들기

Hortonworks HDP 또는 Cloudera CDH Hadoop 클러스터를 참조하는 외부 데이터 원본을 만들려면 머신 이름 또는 Hadoop Namenode 및 포트의 IP 주소를 지정합니다.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
  ( LOCATION = 'hdfs://10.10.10.10:8050' ,
    TYPE = HADOOP
  ) ;

B. 푸시 다운이 활성화된 상태에서 Hadoop를 참조하는 외부 데이터 원본 만들기

RESOURCE_MANAGER_LOCATION 옵션을 지정하여 PolyBase 쿼리에 대한 Hadoop 계산 푸시 다운을 활성화합니다. 활성화되면 PolyBase는 쿼리 계산을 Hadoop에 푸시해야 하는지 여부를 결정하기 위해 비용 기반 결정을 내립니다.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
  ( LOCATION = 'hdfs://10.10.10.10:8020' ,
    TYPE = HADOOP ,
    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
  ) ;

C. Kerberos 보안 Hadoop를 참조하는 외부 데이터 원본 만들기

Hadoop 클러스터가 Kerberos 보안 방식인지 확인하려면 Hadoop core-site.xml에서 hadoop.security.authentication 속성의 값을 확인합니다. Kerberos 보안 Hadoop 클러스터를 확인하려면 Kerberos 사용자 이름과 암호를 포함한 데이터베이스 범위 자격 증명을 지정해야 합니다. 데이터베이스 범위 자격 증명 비밀을 암호화하는 데에는 데이터베이스 마스터 키가 사용됩니다.

-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;

-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
WITH
     IDENTITY = '<hadoop_user_name>',
     SECRET = '<hadoop_password>' ;

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
  ( LOCATION = 'hdfs://10.10.10.10:8050' ,
    CREDENTIAL = HadoopUser1 ,
    TYPE = HADOOP ,
    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
  );

D. wasb://인터페이스를 사용하여 Azure Storage의 데이터에 액세스하는 외부 데이터 원본 만들기

이 예제에서 외부 데이터 원본은 logs라는 Azure V2 Storage 계정입니다. 스토리지 컨테이너를 daily라고 합니다. Azure Storage 외부 데이터 원본은 데이터 전송 전용입니다. 조건자 푸시 다운을 지원하지 않습니다. 계층 구조 네임스페이스는 wasb:// 인터페이스를 통해 데이터에 액세스하는 경우 지원되지 않습니다.

이 예제에서는 Azure V2 Storage 계정에 대한 인증을 위해 데이터베이스 범위 자격 증명을 만드는 방법을 보여 줍니다. 데이터베이스 자격 증명 비밀에 Azure Storage 계정 키를 지정합니다. Azure Storage에 대한 인증 중에는 사용되지 않으므로 데이터베이스 범위 지정 자격 증명 ID에 문자열을 지정할 수 있습니다. WASB 커넥터를 통해 Azure Storage에 연결할 때는 SAS(공유 액세스 서명)가 아닌 스토리지 계정 키를 사용하여 인증을 수행해야 합니다.

SQL Server 2016(13.x)에서는 Azure Storage에 액세스하는 경우에도 TYPEHADOOP으로 설정해야 합니다.

-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;

-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH
  IDENTITY = '<my_account>' ,
  SECRET = '<azure_storage_account_key>' ;

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH
  ( LOCATION = 'wasbs://daily@logs.blob.core.windows.net/' ,
    CREDENTIAL = AzureStorageCredential ,
    TYPE = HADOOP
  ) ;

다음 단계

개요: SQL Server 2017

적용 대상: SQL Server 2017(14.x)만 해당

PolyBase 쿼리에 대한 외부 데이터 원본을 만듭니다. 외부 데이터 원본은 연결을 설정하고 다음과 같은 기본 사용 사례를 지원하는 데 사용됩니다.

  • PolyBase를 사용하여 데이터 가상화 및 데이터 로드
  • BULK INSERT 또는 OPENROWSET를 사용한 대량 로드 작업

참고

이 구문은 SQL Server on Linux의 버전마다 다릅니다. 버전 선택기 드롭다운을 사용하여 적절한 버전을 선택합니다.
SQL Server 2019(15.x)의 기능을 보려면 CREATE EXTERNAL DATA SOURCE를 참조하세요. SQL Server 2022(16.x)의 기능을 보려면 CREATE EXTERNAL DATA SOURCE를 참조하세요.

참고

이 구문은 SQL Server 버전마다 다릅니다. 버전 선택기 드롭다운을 사용하여 적절한 버전을 선택합니다.
SQL Server 2019(15.x)의 기능을 보려면 CREATE EXTERNAL DATA SOURCE를 참조하세요. SQL Server 2022(16.x)의 기능을 보려면 CREATE EXTERNAL DATA SOURCE를 참조하세요.

SQL Server 2017용 구문

구문 표기 규칙에 대한 자세한 내용은 Transact-SQL 구문 표기 규칙을 참조하세요.

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] TYPE = { HADOOP | BLOB_STORAGE } ]
    [ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]

인수

data_source_name

데이터 원본에 대한 사용자 정의 이름을 지정합니다. 이름은 SQL Server의 데이터베이스 내에서 반드시 고유해야 합니다.

LOCATION = '<prefix>://<path[:port]>'

외부 데이터 원본에 대한 연결 프로토콜 및 경로를 제공합니다.

외부 데이터 원본 커넥터 위치 접두사 위치 경로 제품 / 서비스별로 지원되는 위치 인증
Cloudera CDH 또는 Hortonworks HDP hdfs <Namenode>[:port] SQL Server 2016(13.x)에서 SQL Server 2019(15.x)까지만 익명 또는 기본 인증
Azure Storage 계정(V2) wasb[s] <container>@<storage_account>.blob.core.windows.net SQL Server 2016(13.x)로 시작
계층 구조 네임스페이스는 지원되지 않음
Azure Storage 계정 키
대량 작업 https <storage_account>.blob.core.windows.net/<container> SQL Server 2017(14.x)부터 공유 액세스 서명(SAS)

위치 경로:

  • <Namenode> = Hadoop 클러스터에 있는 Namenode의 머신 이름, 이름서비스 URI 또는 IP 주소입니다. PolyBase는 Hadoop 클러스터에서 사용하는 모든 DNS 이름을 확인해야 합니다.
  • port = 외부 데이터 원본이 수신 대기 중인 포트입니다. Hadoop에서는 fs.defaultFS 구성 매개 변수를 사용하여 포트를 찾을 수 있습니다. 기본값은 8020입니다.
  • <container> = 데이터를 보관하는 스토리지 계정의 컨테이너입니다. 루트 컨테이너는 읽기 전용이므로 데이터를 컨테이너에 다시 쓸 수 없습니다.
  • <storage_account> = Azure 리소스의 스토리지 계정 이름입니다.
  • <server_name> = 호스트 이름입니다.
  • <instance_name> = SQL Server 명명된 인스턴스의 이름입니다. 대상 인스턴스에서 SQL Server Browser Service가 실행 중인 경우에 사용됩니다.

위치 설정 시 추가 참고 사항 및 지침:

  • SQL Server 데이터베이스 엔진은 개체가 생성될 때 외부 데이터 원본이 존재하는지 확인하지 않습니다. 유효성을 검사하려면 외부 데이터 원본을 사용하여 외부 테이블을 만듭니다.
  • 일관된 쿼리 의미 체계를 보장하기 위해 Hadoop을 쿼리할 때 모든 테이블에 대해 동일한 외부 데이터 원본을 사용합니다.
  • ODBC를 통해 연결할 때 Driver={<Name of Driver>}를 지정합니다.
  • wasbs는 선택 사항이지만, SQL Server 2017(14.x)에서 Azure Storage 계정에 액세스하는 데 권장됩니다. 데이터가 보안 TLS/SSL 연결을 사용하여 전송되기 때문입니다.
  • Hadoop Namenode 장애 조치(failover) 중에 PolyBase 쿼리를 성공적으로 수행하려면 Hadoop 클러스터의 Namenode에 대한 가상 IP 주소 사용을 고려하세요. 그렇지 않은 경우 ALTER EXTERNAL DATA SOURCE 명령을 실행하여 새 위치를 가리킵니다.

CREDENTIAL = credential_name

외부 데이터 원본에 대해 인증하기 위한 데이터베이스 범위 자격 증명을 지정합니다.

자격 증명 생성 시 추가 참고 사항 및 지침:

  • CREDENTIAL은 데이터 보안이 설정된 경우에만 필요합니다. 익명 액세스를 허용하는 데이터 세트에는 CREDENTIAL이 필요하지 않습니다.
  • TYPE = BLOB_STORAGE인 경우 SHARED ACCESS SIGNATURE를 ID로 사용하여 자격 증명을 만들어야 합니다.
  • TYPE = BLOB_STORAGE는 대량 작업에만 사용할 수 있습니다. TYPE = BLOB_STORAGE를 사용하여 외부 데이터 원본에 대한 외부 테이블을 만들 수 없습니다.
  • WASB 커넥터를 통해 Azure Storage에 연결할 때는 SAS(공유 액세스 서명)가 아닌 스토리지 계정 키를 사용하여 인증을 수행해야 합니다.
  • TYPE = HADOOP인 경우 스토리지 계정 키를 SECRET으로 사용하여 자격 증명을 만들어야 합니다.

공유 액세스 서명을 만드는 방법에는 여러 가지가 있습니다.

  • Azure Portal -Your_Storage_Account> ->< 공유 액세스 서명 - 권한 구성 ->> SAS 및 연결 문자열 생성으로 이동하여 SAS 토큰을 만들 수 있습니다>. 자세한 내용은 공유 액세스 서명 생성을 참조하세요.

  • Azure Storage Explorer 사용하여 SAS를 만들고 구성할 수 있습니다.

  • PowerShell, Azure CLI, .NET 및 REST API를 통해 프로그래밍 방식으로 SAS를 만들 수 있습니다. 자세한 내용은 SAS(공유 액세스 서명)를 사용하여 Azure Storage 리소스에 대한 제한된 액세스 권한 부여를 참조하세요.

  • SAS 토큰은 다음과 같이 구성되어야 합니다.

    • SAS 토큰이 생성되면 토큰의 시작 부분에 물음표('?')가 포함됩니다. SECRET로 구성된 경우 선행 ? 을 제외합니다.
    • 유효한 만료 기간을 사용합니다(모든 날짜는 UTC 시간임).
    • 로드해야 하는 파일에 대해 최소한 읽기 권한을 부여합니다(예: srt=o&sp=r). 다양한 사용 사례에 대해 여러 공유 액세스 서명을 만들 수 있습니다. 권한은 다음과 같이 부여되어야 합니다.
    작업 사용 권한
    파일에서 데이터 읽기 읽기
    여러 파일 및 하위 폴더에서 데이터를 읽습니다. 읽기 및 목록

SHARED ACCESS SIGNATURETYPE = BLOB_STORAGE에서 CREDENTIAL을 사용하는 예제는 대량 작업을 실행하고 Azure Storage에서 SQL Database로 데이터를 검색하기 위한 외부 데이터 원본 만들기를 참조하세요.

데이터베이스 범위 지정 자격 증명을 만들려면 CREATE DATABASE SCOPED CREDENTIAL(Transact-SQL)을 참조하세요.

TYPE = [ HADOOP | BLOB_STORAGE ]

구성 중인 외부 데이터 원본의 유형을 지정합니다. 이 매개 변수가 항상 필요한 것은 아니며, Cloudera CDH, Hortonworks HDP, Azure Storage 계정 또는 Azure Data Lake Storage Gen2에 연결할 때만 지정해야 합니다.

  • HADOOP은 외부 데이터 원본이 Cloudera CDH, Hortonworks HDP, Azure Storage 계정 또는 Azure Data Lake Storage Gen2인 경우 사용합니다.
  • BLOB_STORAGEBULK INSERT 또는 OPENROWSET를 사용하여 Azure Storage 계정에서 대량 작업을 실행하는 경우 사용합니다. SQL Server 2017(14.x)에서 도입되었습니다. Azure Storage에 대해 CREATE EXTERNAL TABLE을 수행하려는 경우 HADOOP을 사용합니다.

참고

Azure Storage에 액세스하는 경우에도 TYPEHADOOP으로 설정해야 합니다.

TYPE = HADOOP을 사용하여 Azure Storage 계정에서 데이터를 로드하는 예제는 wasb://인터페이스를 사용하여 Azure Storage의 데이터에 액세스하는 외부 데이터 원본 만들기를 참조하세요.

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'

Cloudera CDH, Hortonworks HDP 또는 Azure Storage 계정에 연결할 때만 이 선택적 값을 구성합니다. 지원되는 Hadoop 버전의 전체 목록은 PolyBase 연결 구성(Transact-SQL)을 참조하세요.

RESOURCE_MANAGER_LOCATION이 정의되면 쿼리 최적화 프로그램은 성능 향상을 위해 비용 기반 결정을 내립니다. MapReduce 작업을 사용하여 Hadoop으로 계산을 푸시 다운할 수 있습니다. RESOURCE_MANAGER_LOCATION을 지정하면 Hadoop과 SQL Server 간에 전송되는 데이터 양을 크게 줄여 쿼리 성능을 향상시킬 수 있습니다.

리소스 관리자를 지정하지 않은 경우 Hadoop에 대한 푸시 컴퓨팅은 PolyBase 쿼리에 대해 비활성화됩니다. 푸시 다운이 활성화된 Hadoop을 참조하는 외부 데이터 원본 만들기는 구체적인 예제와 추가 지침을 제공합니다.

외부 데이터 원본을 만들 때 RESOURCE_MANAGER_LOCATION 값의 유효성이 검사되지 않습니다. 잘못된 값을 입력하면 제공된 값을 확인할 수 없으므로 푸시 다운을 시도할 때마다 실행 시 쿼리 오류가 발생할 수 있습니다.

PolyBase가 Hadoop 외부 데이터 원본에서 올바르게 작동하려면 다음 Hadoop 클러스터 구성 요소에 대한 포트가 열려 있어야 합니다.

  • HDFS 포트
    • Namenode
    • Datanode
  • 리소스 관리자
    • 작업 제출
    • 작업 기록

포트를 지정하지 않을 경우 기본값은 'hadoop 연결' 구성에 대한 현재 설정을 사용하여 선택됩니다.

Hadoop 연결 기본 Resource Manager 포트
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050
8 8032

다음 표에서는 이러한 구성 요소의 기본 포트를 보여 줍니다. Hadoop 버전 종속성뿐만 아니라 기본 포트 할당을 사용하지 않는 사용자 지정 구성도 가능합니다.

Hadoop 클러스터 구성 요소 기본 포트
NameNode 8020
DataNode(데이터 전송, 비 권한 IPC 포트) 50010
DataNode(데이터 전송, 권한 IPC 포트) 1019
Resource Manager 작업 제출(Hortonworks 1.3) 50300
Resource Manager 작업 제출(Cloudera 4.3) 8021
Resource Manager 작업 제출(Windows의 Hortonworks 2.0, Linux의 Cloudera 5.x) 8032
Resource Manager 작업 제출(Linux의 Hortonworks 2.x, 3.0, Windows의 Hortonworks 2.1~3) 8050
Resource Manager 작업 기록 10020

사용 권한

SQL Server의 데이터베이스에 대한 CONTROL 권한이 필요합니다.

잠금

EXTERNAL DATA SOURCE 개체에 대한 공유 잠금을 수행합니다.

보안

PolyBase는 대부분의 외부 데이터 원본에 대해 프록시 기반 인증을 지원합니다. 데이터베이스 범위 자격 증명을 생성하여 프록시 계정을 만듭니다.

HADOOP 유형의 SAS 토큰은 지원되지 않습니다. 스토리지 계정 액세스 키를 대신 사용하는 경우에만 BLOB_STORAGE 유형이 지원됩니다. HADOOP 유형 및 SAS 자격 증명으로 외부 데이터 원본을 만들려고 하면 다음 오류로 인해 실패합니다.

Msg 105019, Level 16, State 1 - EXTERNAL TABLE access failed due to internal error: 'Java exception raised on call to HdfsBridge_Connect. Java exception message: Parameters provided to connect to the Azure storage account are not valid.: Error [Parameters provided to connect to the Azure storage account are not valid.] occurred while accessing external file.'

중요

PolyBase를 설치하고 사용하도록 설정하는 방법에 대한 자세한 내용은 Windows에 PolyBase 설치를 참조하세요.

A. Hadoop를 참조하는 외부 데이터 원본 만들기

Hortonworks HDP 또는 Cloudera CDH Hadoop 클러스터를 참조하는 외부 데이터 원본을 만들려면 머신 이름 또는 Hadoop Namenode 및 포트의 IP 주소를 지정합니다.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
  ( LOCATION = 'hdfs://10.10.10.10:8050' ,
    TYPE = HADOOP
  ) ;

B. 푸시 다운이 활성화된 상태에서 Hadoop를 참조하는 외부 데이터 원본 만들기

RESOURCE_MANAGER_LOCATION 옵션을 지정하여 PolyBase 쿼리에 대한 Hadoop 계산 푸시 다운을 활성화합니다. 활성화되면 PolyBase는 쿼리 계산을 Hadoop에 푸시해야 하는지 여부를 결정하기 위해 비용 기반 결정을 내립니다.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
  ( LOCATION = 'hdfs://10.10.10.10:8020' ,
    TYPE = HADOOP ,
    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
  ) ;

C. Kerberos 보안 Hadoop를 참조하는 외부 데이터 원본 만들기

Hadoop 클러스터가 Kerberos 보안 방식인지 확인하려면 Hadoop core-site.xml에서 hadoop.security.authentication 속성의 값을 확인합니다. Kerberos 보안 Hadoop 클러스터를 확인하려면 Kerberos 사용자 이름과 암호를 포함한 데이터베이스 범위 자격 증명을 지정해야 합니다. 데이터베이스 범위 자격 증명 비밀을 암호화하는 데에는 데이터베이스 마스터 키가 사용됩니다.

-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;

-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
WITH
     IDENTITY = '<hadoop_user_name>',
     SECRET = '<hadoop_password>' ;

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
  ( LOCATION = 'hdfs://10.10.10.10:8050' ,
    CREDENTIAL = HadoopUser1 ,
    TYPE = HADOOP ,
    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
  );

D. wasb://인터페이스를 사용하여 Azure Storage의 데이터에 액세스하는 외부 데이터 원본 만들기

이 예제에서 외부 데이터 원본은 logs라는 Azure V2 Storage 계정입니다. 스토리지 컨테이너를 daily라고 합니다. Azure Storage 외부 데이터 원본은 데이터 전송 전용입니다. 조건자 푸시 다운을 지원하지 않습니다. 계층 구조 네임스페이스는 wasb:// 인터페이스를 통해 데이터에 액세스하는 경우 지원되지 않습니다. WASB 커넥터를 통해 Azure Storage에 연결할 때는 SAS(공유 액세스 서명)가 아닌 스토리지 계정 키를 사용하여 인증을 수행해야 합니다.

이 예제에서는 Azure V2 Storage 계정에 대한 인증을 위해 데이터베이스 범위 자격 증명을 만드는 방법을 보여 줍니다. 데이터베이스 자격 증명 비밀에 Azure Storage 계정 키를 지정합니다. Azure Storage에 대한 인증 중에는 사용되지 않으므로 데이터베이스 범위 지정 자격 증명 ID에 문자열을 지정할 수 있습니다.

-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;

-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH
  IDENTITY = '<my_account>' ,
  SECRET = '<azure_storage_account_key>' ;

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH
  ( LOCATION = 'wasbs://daily@logs.blob.core.windows.net/' ,
    CREDENTIAL = AzureStorageCredential ,
    TYPE = HADOOP
  ) ;

예제: 대량 작업

중요

대량 작업을 위해 외부 데이터 원본을 구성할 때 LOCATION URL 끝에 추적 / , 파일 이름 또는 공유 액세스 서명 매개 변수를 추가하지 마세요.

E. Azure Storage에서 데이터를 검색하는 대량 작업을 위한 외부 데이터 원본 만들기

적용 대상: SQL Server 2017(14.x) 이상

BULK INSERT 또는 OPENROWSET을 사용하여 대량 작업에 대한 다음 데이터 원본을 만듭니다. 자격 증명은 SHARED ACCESS SIGNATURE를 ID로 설정해야 하며 SAS 토큰에서 앞에 ?가 없어야 하며, 적어도 로드할 파일에 대한 읽기 권한이 있어야 하고(예: srt=o&sp=r) 만료 기간이 유효해야 합니다(모든 날짜는 UTC 시간임). 공유 액세스 서명에 대한 자세한 내용은 SAS(공유 액세스 서명) 사용을 참조하세요.

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH
  IDENTITY = 'SHARED ACCESS SIGNATURE',
  -- Remove ? from the beginning of the SAS token
  SECRET = '<azure_storage_account_key>' ;

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH
  ( LOCATION = 'https://newinvoices.blob.core.windows.net/week3' ,
    CREDENTIAL = AccessAzureInvoices ,
    TYPE = BLOB_STORAGE
  ) ;

이 예제를 사용하는 방법에 대한 자세한 내용은 BULK INSERT 예제를 참조하세요.

다음 단계

개요: SQL Server 2019

적용 대상: SQL Server 2019(15.x) 이상

PolyBase 쿼리에 대한 외부 데이터 원본을 만듭니다. 외부 데이터 원본은 연결을 설정하고 다음과 같은 기본 사용 사례를 지원하는 데 사용됩니다.

  • PolyBase를 사용하여 데이터 가상화 및 데이터 로드
  • BULK INSERT 또는 OPENROWSET를 사용한 대량 로드 작업

참고

이 구문은 SQL Server 버전마다 다릅니다. 버전 선택기 드롭다운을 사용하여 적절한 버전을 선택합니다.
SQL Server 2022(16.x)의 기능을 보려면 CREATE EXTERNAL DATA SOURCE를 참조하세요.

참고

이 구문은 SQL Server 버전마다 다릅니다. 버전 선택기 드롭다운을 사용하여 적절한 버전을 선택합니다.
SQL Server 2022(16.x)의 기능을 보려면 CREATE EXTERNAL DATA SOURCE를 참조하세요.

SQL Server 2019용 구문

구문 표기 규칙에 대한 자세한 내용은 Transact-SQL 구문 표기 규칙을 참조하세요.

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] PUSHDOWN = { ON | OFF } ]
    [ [ , ] TYPE = { HADOOP | BLOB_STORAGE } ]
    [ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]

인수

data_source_name

데이터 원본에 대한 사용자 정의 이름을 지정합니다. 이름은 SQL Server의 데이터베이스 내에서 반드시 고유해야 합니다.

LOCATION = '<prefix>://<path[:port]>'

외부 데이터 원본에 대한 연결 프로토콜 및 경로를 제공합니다.

외부 데이터 원본 커넥터 위치 접두사 위치 경로 제품 / 서비스별로 지원되는 위치 인증
Cloudera CDH 또는 Hortonworks HDP hdfs <Namenode>[:port] SQL Server 2016(13.x)에서 SQL Server 2019(15.x)까지 익명 또는 기본 인증
Azure Storage 계정(V2) wasb[s] <container>@<storage_account>.blob.core.windows.net SQL Server 2016(13.x)로 시작
계층 구조 네임스페이스는 지원되지 않음
Azure Storage 계정 키
SQL Server sqlserver <server_name>[\<instance_name>][:port] SQL Server 2019(15.x)부터 SQL 인증 전용
Oracle oracle <server_name>[:port] SQL Server 2019(15.x)부터 기본 인증 전용입니다.
Teradata teradata <server_name>[:port] SQL Server 2019(15.x)부터 기본 인증 전용입니다.
MongoDB 또는 Cosmos DB API for MongoDB mongodb <server_name>[:port] SQL Server 2019(15.x)부터 기본 인증 전용입니다.
일반 ODBC odbc <server_name>[:port] SQL Server 2019(15.x)부터 - Windows만 해당 기본 인증 전용입니다.
대량 작업 https <storage_account>.blob.core.windows.net/<container> SQL Server 2017(14.x)부터 공유 액세스 서명(SAS)
Azure Data Lake Storage Gen2 abfs[s] abfss://<container>@<storage _account>.dfs.core.windows.net SQL Server 2019(15.x) CU11+부터 스토리지 액세스 키
SQL Server 빅 데이터 클러스터 데이터 풀 sqldatapool sqldatapool://controller-svc/default SQL Server 2019 빅 데이터 클러스터에서만 지원 기본 인증 전용입니다.
SQL Server 빅 데이터 클러스터 스토리지 풀 sqlhdfs sqlhdfs://controller-svc/default SQL Server 2019 빅 데이터 클러스터에서만 지원 기본 인증 전용입니다.

위치 경로:

  • <Namenode> = Hadoop 클러스터에 있는 Namenode의 머신 이름, 이름 서비스 URI 또는 IP 주소입니다. PolyBase는 Hadoop 클러스터에서 사용하는 모든 DNS 이름을 확인해야 합니다.
  • port = 외부 데이터 원본이 수신 대기 중인 포트입니다. Hadoop에서는 fs.defaultFS 구성 매개 변수를 사용하여 포트를 찾을 수 있습니다. 기본값은 8020입니다.
  • <container> = 데이터를 보관하는 스토리지 계정의 컨테이너입니다. 루트 컨테이너는 읽기 전용이므로 데이터를 컨테이너에 다시 쓸 수 없습니다.
  • <storage_account> = Azure 리소스의 스토리지 계정 이름입니다.
  • <server_name> = 호스트 이름입니다.
  • <instance_name> = SQL Server 명명된 인스턴스의 이름입니다. 대상 인스턴스에서 SQL Server Browser Service가 실행 중인 경우에 사용됩니다.

위치 설정 시 추가 참고 사항 및 지침:

  • SQL Server 데이터베이스 엔진은 개체가 생성될 때 외부 데이터 원본이 존재하는지 확인하지 않습니다. 유효성을 검사하려면 외부 데이터 원본을 사용하여 외부 테이블을 만듭니다.
  • 일관된 쿼리 의미 체계를 보장하기 위해 Hadoop을 쿼리할 때 모든 테이블에 대해 동일한 외부 데이터 원본을 사용합니다.
  • 커넥터를 sqlserver 사용하여 SQL Server 2019(15.x)를 다른 SQL Server 연결하거나 Azure SQL 데이터베이스에 연결할 수 있습니다.
  • ODBC를 통해 연결할 때 Driver={<Name of Driver>}를 지정합니다.
  • wasbs 또는 abfss 사용은 선택 사항이지만, SQL Server 2019(15.x)에서 Azure Storage 계정에 액세스하는 데 권장됩니다. 데이터가 보안 TLS/SSL 연결을 사용하여 전송되기 때문입니다.
  • abfs 또는 abfss API는 SQL Server 2019 (15.x) CU11 이상부터 Azure Storage 계정에 액세스할 때 지원되지 않습니다. 자세한 내용은 ABFS(Azure Blob 파일 시스템) 드라이버를 참조하세요.
  • abfs[s]를 사용하는 Azure Storage 계정(V2)의 계층 구조 네임스페이스 옵션은 SQL Server 2019 (15.x) CU11 이상부터 Azure Data Lake Storage Gen2를 통해 지원됩니다. 이외의 경우에는 계층 구조 네임스페이스 옵션이 지원되지 않으며 이 옵션은 사용하지 않도록 설정되어야 합니다.
  • Hadoop Namenode 장애 조치(failover) 중에 PolyBase 쿼리를 성공적으로 수행하려면 Hadoop 클러스터의 Namenode에 대한 가상 IP 주소 사용을 고려하세요. 그렇지 않은 경우 ALTER EXTERNAL DATA SOURCE 명령을 실행하여 새 위치를 가리킵니다.
  • sqlhdfssqldatapool 형식은 빅 데이터 클러스터의 마스터 인스턴스와 스토리지 풀 간의 연결을 지원합니다. Cloudera CDH 또는 Hortonworks HDP의 경우 hdfs를 사용합니다. SQL Server 빅 데이터 클러스터 스토리지 풀 쿼리에 sqlhdfs 사용에 대한 자세한 내용은 SQL Server 2019 빅 데이터 클러스터에서 HDFS 쿼리를 참조하세요.
  • HDFS Cloudera(CDP) 및 HDP(Hortonworks) 외부 데이터 원본에 대한 SQL Server 지원은 사용 중지되며 SQL Server 2022(16.x)에 포함되지 않습니다. 자세한 내용은 Microsoft SQL Server 플랫폼의 빅 데이터 옵션을 참조하세요.

CONNECTION_OPTIONS = key_value_pair

SQL Server 2019(15.x) 이상에 지정됩니다. ODBC를 외부 데이터 원본에 연결할 때 추가 옵션을 지정합니다. 여러 연결 옵션을 사용하려면 세미콜론으로 구분합니다.

SQL Server, Oracle, Teradata, MongoDB 및 Azure Cosmos DB API for MongoDB용으로 기본 제공되는 ODBC 커넥터뿐만 아니라 일반 ODBC 연결에 적용됩니다.

key_value_pair는 키워드이며 특정 연결 옵션 값입니다. 사용 가능한 키워드 및 값은 외부 데이터 원본 유형에 따라 달라집니다. 최소한 드라이버 이름이 필요하지만, 설정하면 유용하고 문제 해결에 도움이 되는 APP='<your_application_name>', ApplicationIntent= ReadOnly|ReadWrite 등의 다른 옵션도 있습니다.

가능한 키 값 쌍은 외부 데이터 원본 공급업체에 대한 공급자와 관련이 있습니다. 각 공급자에 대한 자세한 내용은 CREATE EXTERNAL DATA SOURCE(Transact-SQL) CONNECTION_OPTIONS 참조하세요.

Pushdown = ON | OFF

SQL Server 2019(15.x)에만 지정됩니다. 외부 데이터 원본에 푸시 다운할 수 있는지 여부를 알려줍니다. 기본적으로 ON입니다.

PUSHDOWN은 외부 데이터 원본 수준에서 SQL Server, Oracle, Teradata, MongoDB, Azure Cosmos DB API for MongoDB 또는 ODBC에 연결할 때 지원됩니다.

쿼리 수준에서 푸시 다운을 활성화 또는 비활성화는 힌트를 통해 구현됩니다.

CREDENTIAL = credential_name

외부 데이터 원본에 대해 인증하기 위한 데이터베이스 범위 자격 증명을 지정합니다.

자격 증명 생성 시 추가 참고 사항 및 지침:

  • CREDENTIAL은 데이터 보안이 설정된 경우에만 필요합니다. 익명 액세스를 허용하는 데이터 세트에는 CREDENTIAL이 필요하지 않습니다.
  • TYPE = BLOB_STORAGE인 경우 SHARED ACCESS SIGNATURE를 ID로 사용하여 자격 증명을 만들어야 합니다.
    • TYPE = BLOB_STORAGE는 대량 작업에만 사용할 수 있습니다. TYPE = BLOB_STORAGE를 사용하여 외부 데이터 원본에 대한 외부 테이블을 만들 수 없습니다.

공유 액세스 서명을 만드는 방법에는 여러 가지가 있습니다.

  • Azure Portal -Your_Storage_Account> ->< 공유 액세스 서명 - 권한 구성 ->> SAS 및 연결 문자열 생성으로 이동하여 SAS 토큰을 만들 수 있습니다>. 자세한 내용은 공유 액세스 서명 생성을 참조하세요.

  • Azure Storage Explorer 사용하여 SAS를 만들고 구성할 수 있습니다.

  • PowerShell, Azure CLI, .NET 및 REST API를 통해 프로그래밍 방식으로 SAS를 만들 수 있습니다. 자세한 내용은 SAS(공유 액세스 서명)를 사용하여 Azure Storage 리소스에 대한 제한된 액세스 권한 부여를 참조하세요.

  • SAS 토큰은 다음과 같이 구성해야 합니다.

    • SAS 토큰이 생성되면 토큰의 시작 부분에 물음표('?')가 포함됩니다. SECRET으로 구성된 경우 선행 ? 을 제외합니다.
    • 유효한 만료 기간을 사용합니다(모든 날짜는 UTC 시간임).
    • 로드해야 하는 파일에 대해 최소한 읽기 권한을 부여합니다(예: srt=o&sp=r). 다양한 사용 사례에 대해 여러 공유 액세스 서명을 만들 수 있습니다. 권한은 다음과 같이 부여되어야 합니다.
    작업 사용 권한
    파일에서 데이터 읽기 읽기
    여러 파일 및 하위 폴더에서 데이터를 읽습니다. 읽기 및 나열

SHARED ACCESS SIGNATURETYPE = BLOB_STORAGE에서 CREDENTIAL을 사용하는 예제는 대량 작업을 실행하고 Azure Storage에서 SQL Database로 데이터를 검색하기 위한 외부 데이터 원본 만들기를 참조하세요.

데이터베이스 범위 지정 자격 증명을 만들려면 CREATE DATABASE SCOPED CREDENTIAL(Transact-SQL)을 참조하세요.

TYPE = [ HADOOP | BLOB_STORAGE ]

구성 중인 외부 데이터 원본의 유형을 지정합니다. 이 매개 변수가 항상 필요한 것은 아니며, Cloudera CDH, Hortonworks HDP, Azure Storage 계정 또는 Azure Data Lake Storage Gen2에 연결할 때만 지정해야 합니다.

  • SQL Server 2019 (15.x)에서는 Cloudera CDH, Hortonworks HDP, Azure Storage 계정에 연결하지 않는 한 TYPE을 지정하지 마세요.
  • HADOOP은 외부 데이터 원본이 Cloudera CDH, Hortonworks HDP, Azure Storage 계정 또는 Azure Data Lake Storage Gen2인 경우 사용합니다.
  • BLOB_STORAGEBULK INSERT를 사용하거나 SQL Server 2017(14.x)에서 OPENROWSET를 사용하여 Azure Storage 계정에서 대량 작업을 실행하는 경우 사용합니다. Azure Storage에 대해 CREATE EXTERNAL TABLE을 수행하려는 경우 HADOOP을 사용합니다.
  • HDFS CLOUDERA(CDP) 및 HDP(Hortonworks) 외부 데이터 원본에 대한 SQL Server 지원은 사용 중지되며 SQL Server 2022(16.x)에 포함되지 않습니다. 자세한 내용은 Microsoft SQL Server 플랫폼의 빅 데이터 옵션을 참조하세요.

TYPE = HADOOP을 사용하여 Azure Storage 계정에서 데이터를 로드하는 예제는 wasb://인터페이스를 사용하여 Azure Storage의 데이터에 액세스하는 외부 데이터 원본 만들기를 참조하세요.

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'

SQL Server 2019 (15.x)에서는 Cloudera CDH, Hortonworks HDP, Azure Storage 계정에 연결하지 않는 한 RESOURCE_MANAGER_LOCATION을 지정하지 마세요.

Cloudera CDH, Hortonworks HDP 또는 Azure Storage 계정에 연결할 때만 이 선택적 값을 구성합니다. 지원되는 Hadoop 버전의 전체 목록은 PolyBase 연결 구성(Transact-SQL)을 참조하세요.

RESOURCE_MANAGER_LOCATION이 정의되면 쿼리 최적화 프로그램은 성능 향상을 위해 비용 기반 결정을 내립니다. MapReduce 작업을 사용하여 Hadoop으로 계산을 푸시 다운할 수 있습니다. RESOURCE_MANAGER_LOCATION을 지정하면 Hadoop과 SQL Server 간에 전송되는 데이터 양을 크게 줄여 쿼리 성능을 향상시킬 수 있습니다.

리소스 관리자를 지정하지 않은 경우 Hadoop에 대한 푸시 컴퓨팅은 PolyBase 쿼리에 대해 비활성화됩니다. 푸시 다운이 활성화된 Hadoop을 참조하는 외부 데이터 원본 만들기는 구체적인 예제와 추가 지침을 제공합니다.

외부 데이터 원본을 만들 때 RESOURCE_MANAGER_LOCATION 값의 유효성이 검사되지 않습니다. 잘못된 값을 입력하면 제공된 값을 확인할 수 없으므로 푸시 다운을 시도할 때마다 실행 시 쿼리 오류가 발생할 수 있습니다.

PolyBase가 Hadoop 외부 데이터 원본에서 올바르게 작동하려면 다음 Hadoop 클러스터 구성 요소에 대한 포트가 열려 있어야 합니다.

  • HDFS 포트
    • Namenode
    • Datanode
  • 리소스 관리자
    • 작업 제출
    • 작업 기록

포트를 지정하지 않을 경우 기본값은 'hadoop 연결' 구성에 대한 현재 설정을 사용하여 선택됩니다.

Hadoop 연결 기본 Resource Manager 포트
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050
8 8032

다음 표에서는 이러한 구성 요소의 기본 포트를 보여 줍니다. Hadoop 버전 종속성뿐만 아니라 기본 포트 할당을 사용하지 않는 사용자 지정 구성도 가능합니다.

Hadoop 클러스터 구성 요소 기본 포트
NameNode 8020
DataNode(데이터 전송, 비 권한 IPC 포트) 50010
DataNode(데이터 전송, 권한 IPC 포트) 1019
Resource Manager 작업 제출(Hortonworks 1.3) 50300
Resource Manager 작업 제출(Cloudera 4.3) 8021
Resource Manager 작업 제출(Windows의 Hortonworks 2.0, Linux의 Cloudera 5.x) 8032
Resource Manager 작업 제출(Linux의 Hortonworks 2.x, 3.0, Windows의 Hortonworks 2.1~3) 8050
Resource Manager 작업 기록 10020

사용 권한

SQL Server의 데이터베이스에 대한 CONTROL 권한이 필요합니다.

잠금

EXTERNAL DATA SOURCE 개체에 대한 공유 잠금을 수행합니다.

보안

PolyBase는 대부분의 외부 데이터 원본에 대해 프록시 기반 인증을 지원합니다. 데이터베이스 범위 자격 증명을 생성하여 프록시 계정을 만듭니다.

SQL Server 2019 빅 데이터 클러스터의 스토리지 또는 데이터 풀에 연결하면 사용자의 자격 증명이 백 엔드 시스템을 통해 전달됩니다. 통과 인증을 사용하도록 설정하려면 데이터 풀 자체의 로그인을 만듭니다.

HADOOP 유형의 SAS 토큰은 지원되지 않습니다. 스토리지 계정 액세스 키를 대신 사용하는 경우에만 BLOB_STORAGE 유형이 지원됩니다. HADOOP 유형 및 SAS 자격 증명으로 외부 데이터 원본을 만들려고 하면 다음 오류로 인해 실패합니다.

Msg 105019, Level 16, State 1 - EXTERNAL TABLE access failed due to internal error: 'Java exception raised on call to HdfsBridge_Connect. Java exception message: Parameters provided to connect to the Azure storage account are not valid.: Error [Parameters provided to connect to the Azure storage account are not valid.] occurred while accessing external file.'

중요

PolyBase를 설치하고 사용하도록 설정하는 방법에 대한 자세한 내용은 Windows에 PolyBase 설치를 참조하세요.

A. Oracle을 참조하는 SQL Server 2019에서 외부 데이터 원본 만들기

Oracle을 참조하는 외부 데이터 원본을 만들려면 데이터베이스 범위 자격 증명이 있는지 확인합니다. 이 데이터 원본에 대한 계산 푸시 다운을 활성화하거나 비활성화할 수도 있습니다.

-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;

-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL OracleProxyAccount
WITH
     IDENTITY = 'oracle_username',
     SECRET = 'oracle_password' ;

CREATE EXTERNAL DATA SOURCE MyOracleServer
WITH
  ( LOCATION = 'oracle://145.145.145.145:1521',
    CREDENTIAL = OracleProxyAccount,
    PUSHDOWN = ON
  ) ;

필요에 따라 Oracle에 대한 외부 데이터 원본은 프록시 인증을 사용하여 세분화된 액세스 제어를 제공할 수 있습니다. 가장된 사용자에 비해 제한된 액세스 권한을 갖도록 프록시 사용자를 구성할 수 있습니다.

CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
WITH IDENTITY = 'oracle_username', SECRET = 'oracle_password';

CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
WITH (LOCATION = 'oracle://145.145.145.145:1521',
CONNECTION_OPTIONS = 'ImpersonateUser=%CURRENT_USER',
CREDENTIAL = [OracleProxyCredential]);

MongoDB와 같은 다른 데이터 원본에 대한 추가 예제는 MongoDB에서 외부 데이터에 액세스하도록 PolyBase 구성을 참조하세요.

B. Hadoop를 참조하는 외부 데이터 원본 만들기

Hortonworks HDP 또는 Cloudera CDH Hadoop 클러스터를 참조하는 외부 데이터 원본을 만들려면 머신 이름 또는 Hadoop Namenode 및 포트의 IP 주소를 지정합니다.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
  ( LOCATION = 'hdfs://10.10.10.10:8050' ,
    TYPE = HADOOP
  ) ;

C. 푸시 다운이 활성화된 상태에서 Hadoop를 참조하는 외부 데이터 원본 만들기

RESOURCE_MANAGER_LOCATION 옵션을 지정하여 PolyBase 쿼리에 대한 Hadoop 계산 푸시 다운을 활성화합니다. 활성화되면 PolyBase는 쿼리 계산을 Hadoop에 푸시해야 하는지 여부를 결정하기 위해 비용 기반 결정을 내립니다.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
  ( LOCATION = 'hdfs://10.10.10.10:8020' ,
    TYPE = HADOOP ,
    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
  ) ;

D. Kerberos 보안 Hadoop를 참조하는 외부 데이터 원본 만들기

Hadoop 클러스터가 Kerberos 보안 방식인지 확인하려면 Hadoop core-site.xml에서 hadoop.security.authentication 속성의 값을 확인합니다. Kerberos 보안 Hadoop 클러스터를 확인하려면 Kerberos 사용자 이름과 암호를 포함한 데이터베이스 범위 자격 증명을 지정해야 합니다. 데이터베이스 범위 자격 증명 비밀을 암호화하는 데에는 데이터베이스 마스터 키가 사용됩니다.

-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;

-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
WITH
     IDENTITY = '<hadoop_user_name>',
     SECRET = '<hadoop_password>' ;

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
  ( LOCATION = 'hdfs://10.10.10.10:8050' ,
    CREDENTIAL = HadoopUser1 ,
    TYPE = HADOOP ,
    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
  );

E. wasb://인터페이스를 사용하여 Azure Storage의 데이터에 액세스하는 외부 데이터 원본 만들기

이 예제에서 외부 데이터 원본은 logs라는 Azure V2 Storage 계정입니다. 스토리지 컨테이너를 daily라고 합니다. Azure Storage 외부 데이터 원본은 데이터 전송 전용입니다. 조건자 푸시 다운을 지원하지 않습니다. 계층 구조 네임스페이스는 wasb:// 인터페이스를 통해 데이터에 액세스하는 경우 지원되지 않습니다. WASB 커넥터를 통해 Azure Storage에 연결할 때는 SAS(공유 액세스 서명)가 아닌 스토리지 계정 키를 사용하여 인증을 수행해야 합니다.

이 예제에서는 Azure V2 Storage 계정에 대한 인증을 위해 데이터베이스 범위 자격 증명을 만드는 방법을 보여 줍니다. 데이터베이스 자격 증명 비밀에 Azure Storage 계정 키를 지정합니다. Azure Storage에 대한 인증 중에는 사용되지 않으므로 데이터베이스 범위 지정 자격 증명 ID에 문자열을 지정할 수 있습니다.

-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;

-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH
  IDENTITY = '<my_account>' ,
  SECRET = '<azure_storage_account_key>' ;

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH
  ( LOCATION = 'wasbs://daily@logs.blob.core.windows.net/' ,
    CREDENTIAL = AzureStorageCredential ,
    TYPE = HADOOP
  ) ;

F. Polybase 연결을 통해 SQL Server 명명된 인스턴스를 참조하는 외부 데이터 원본 만들기

적용 대상: SQL Server 2019(15.x) 이상

CONNECTION_OPTIONS의 명명된 인스턴스를 참조하는 외부 데이터 원본을 만들려면 SQL Server를 사용하여 인스턴스 이름을 지정합니다.

아래 예제에서 WINSQL2019는 호스트 이름이고 SQL2019는 인스턴스 이름입니다. 'Server=%s\SQL2019'는 키 값 쌍입니다.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
  LOCATION = 'sqlserver://WINSQL2019' ,
  CONNECTION_OPTIONS = 'Server=%s\SQL2019' ,
  CREDENTIAL = SQLServerCredentials
) ;

또는 포트를 사용하여 SQL Server 기본 인스턴스에 연결할 수 있습니다.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
  LOCATION = 'sqlserver://WINSQL2019:58137' ,
  CREDENTIAL = SQLServerCredentials
) ;

G. Always On 가용성 그룹의 읽기 가능한 보조 복제본을 참조하는 외부 데이터 원본 만들기

적용 대상: SQL Server 2019(15.x) 이상

SQL Server의 읽기 가능한 보조 복제본을 참조하는 외부 데이터 원본을 만들려면 CONNECTION_OPTIONS을(를) 사용하여 ApplicationIntent=ReadOnly을(를) 지정합니다.

먼저 데이터베이스 범위 자격 증명을 만들고 SQL 인증된 로그인에 대한 자격 증명을 저장합니다. PolyBase용 SQL ODBC 커넥터는 기본 인증만 지원하고 Kerberos 인증은 지원하지 않습니다. 데이터베이스 범위 자격 증명을 만들기 전에 자격 증명을 보호하려면 데이터베이스에 마스터 키가 있어야 합니다. 자세한 내용은 CREATE MASTER KEY를 참조하세요. 다음 샘플에서는 데이터베이스 범위 자격 증명을 만들고 사용자 고유의 로그인 및 암호를 제공합니다.

CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username', SECRET = 'password';

다음으로 새 외부 데이터 원본을 만듭니다.

ODBC Database 매개 변수는 필요하지 않습니다. 대신 LOCATION 매개 변수 내에서 CREATE EXTERNAL TABLE 문의 세 부분으로 된 이름을 통해 데이터베이스 이름을 제공합니다. 예제는 외부 테이블 만들기를 참조하세요.

아래 WINSQL2019AGL 예제는 가용성 그룹 수신기 이름이며 dbname은(는) CREATE EXTERNAL TABLE 문의 대상이 될 데이터베이스의 이름입니다.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
  LOCATION = 'sqlserver://WINSQL2019AGL' ,
  CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly' ,
  CREDENTIAL = SQLServerCredentials
);

시스템 뷰 sys.servers에서 ApplicationIntent을(를) 지정하고 외부 테이블을 만들어 가용성 그룹의 리디렉션 동작을 보여 줄 수 있습니다. 다음 샘플 스크립트에서는 두 개의 외부 데이터 원본이 만들어지고 각각에 대해 하나의 외부 테이블이 만들어집니다. 뷰를 사용하여 연결에 응답하는 서버를 테스트합니다. 읽기 전용 라우팅 기능을 통해 유사한 결과를 달성할 수도 있습니다. 자세한 내용은 Always On 가용성 그룹에 대한 읽기 전용 라우팅 구성을 참조하세요.

CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
  LOCATION = 'sqlserver://WINSQL2019AGL' ,
  CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly' ,
  CREDENTIAL = [SQLServerCredentials]);
GO
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
  LOCATION = 'sqlserver://WINSQL2019AGL' ,
  CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite' ,
  CREDENTIAL = [SQLServerCredentials]);
GO

가용성 그룹의 데이터베이스 내에서 sys.servers을(를) 반환할 뷰와 로컬 인스턴스의 이름을 만들어 쿼리에 응답하는 복제본을 식별할 수 있습니다. 자세한 내용은 sys.servers를 참조하세요.

CREATE VIEW vw_sys_servers AS
SELECT [name] FROM sys.servers
WHERE server_id = 0;
GO

그런 다음 원본 인스턴스에 외부 테이블을 만듭니다.

CREATE EXTERNAL TABLE vw_sys_servers_ro
(    name sysname NOT NULL )
WITH (DATA_SOURCE = [DataSource_SQLInstanceListener_ReadOnlyIntent], LOCATION = N'dbname.dbo.vw_sys_servers');
GO
CREATE EXTERNAL TABLE vw_sys_servers_rw
(    name sysname NOT NULL)
WITH (DATA_SOURCE = [DataSource_SQLInstanceListener_ReadWriteIntent], LOCATION = N'dbname.dbo.vw_sys_servers');
GO
SELECT [name] FROM dbo.vw_sys_servers_ro; --should return secondary replica instance
SELECT [name] FROM dbo.vw_sys_servers_rw; --should return primary replica instance
GO

예제: 대량 작업

중요

대량 작업을 위해 외부 데이터 원본을 구성할 때 LOCATION URL 끝에 추적 / , 파일 이름 또는 공유 액세스 서명 매개 변수를 추가하지 마세요.

H. Azure Storage에서 데이터를 검색하는 대량 작업을 위한 외부 데이터 원본 만들기

적용 대상: SQL Server 2017(14.x) 이상

BULK INSERT 또는 OPENROWSET을 사용하여 대량 작업에 대한 다음 데이터 원본을 만듭니다. 자격 증명은 SHARED ACCESS SIGNATURE를 ID로 설정해야 하며 SAS 토큰에서 앞에 ?가 없어야 하며, 적어도 로드할 파일에 대한 읽기 권한이 있어야 하고(예: srt=o&sp=r) 만료 기간이 유효해야 합니다(모든 날짜는 UTC 시간임). 공유 액세스 서명에 대한 자세한 내용은 SAS(공유 액세스 서명) 사용을 참조하세요.

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH
  IDENTITY = 'SHARED ACCESS SIGNATURE',
  -- Remove ? from the beginning of the SAS token
  SECRET = '<azure_shared_access_signature>' ;

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH
  ( LOCATION = 'https://newinvoices.blob.core.windows.net/week3' ,
    CREDENTIAL = AccessAzureInvoices ,
    TYPE = BLOB_STORAGE
  ) ;

이 예제를 사용하는 방법에 대한 자세한 내용은 BULK INSERT 예제를 참조하세요.

9\. abfs://인터페이스를 사용하여 Azure Storage의 데이터에 액세스하는 외부 데이터 원본 만들기

적용 대상: SQL Server 2019 (15.x) CU11 이상.

이 예제에서 외부 데이터 원본은 ABFS(Azure Blob Filesystem) 드라이버를 사용하는 Azure Data Lake Storage Gen2 계정 logs입니다. 스토리지 컨테이너를 daily라고 합니다. 조건자 푸시다운이 지원되지 않으므로 Azure Data Lake Storage Gen2 외부 데이터 원본은 데이터 전송에만 사용됩니다.

이 예제에서는 Azure Data Lake Storage Gen2 계정에 대한 인증을 위해 데이터베이스 범위 자격 증명을 만드는 방법을 보여 줍니다. 데이터베이스 자격 증명 비밀에 Azure Storage 계정 키를 지정합니다. Azure Storage에 대한 인증 중에는 사용되지 않으므로 데이터베이스 범위 지정 자격 증명 ID에 문자열을 지정할 수 있습니다.

-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH
  IDENTITY = '<my_account>' ,
  SECRET = '<azure_storage_account_key>' ;
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH
  ( LOCATION = 'abfss://daily@logs.dfs.core.windows.net/' ,
    CREDENTIAL = AzureStorageCredential ,
    TYPE = HADOOP
  ) ;

J. 일반 ODBC에서 PostgreSQL로 외부 데이터 원본 만들기

이전 예제와 같이 먼저 데이터베이스 마스터 키 및 데이터베이스 범위 자격 증명을 만듭니다. 데이터베이스 범위 자격 증명은 외부 데이터 원본에 사용됩니다. 또한 이 예제에서는 PostgreSQL용 제네릭 ODBC 데이터 공급자가 서버에 설치되어 있다고 가정합니다.

이 예제에서는 일반 ODBC 데이터 공급자를 사용하여 동일한 네트워크의 PostgreSQL 데이터베이스 서버에 연결합니다. 여기서 PostgreSQL 서버의 정규화된 도메인 이름은 TCP 5432의 기본 포트를 사용하여 입니다 POSTGRES1.

CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH
(
 LOCATION = 'odbc://POSTGRES1.domain:5432'
,CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};'
,CREDENTIAL = postgres_credential
)

다음 단계

개요: SQL Server 2022

적용 대상: SQL Server 2022(16.x) 이상

PolyBase 쿼리에 대한 외부 데이터 원본을 만듭니다. 외부 데이터 원본은 연결을 설정하고 다음과 같은 기본 사용 사례를 지원하는 데 사용됩니다.

  • PolyBase를 사용하여 데이터 가상화 및 데이터 로드
  • BULK INSERT 또는 OPENROWSET를 사용한 대량 로드 작업

참고

이 구문은 SQL Server 버전마다 다릅니다. 버전 선택기 드롭다운을 사용하여 적절한 버전을 선택합니다. 이 콘텐츠는 SQL Server 2022(16.x) 이상에 적용됩니다.

SQL Server 2022 이상 구문

구문 표기 규칙에 대한 자세한 내용은 Transact-SQL 구문 표기 규칙을 참조하세요.

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] PUSHDOWN = { ON | OFF } ]
  )
[ ; ]

인수

data_source_name

데이터 원본에 대한 사용자 정의 이름을 지정합니다. 이름은 SQL Server의 데이터베이스 내에서 반드시 고유해야 합니다.

LOCATION = '<prefix>://<path[:port]>'

외부 데이터 원본에 대한 연결 프로토콜 및 경로를 제공합니다.

외부 데이터 원본 커넥터 위치 접두사 위치 경로 제품 / 서비스별로 지원되는 위치 인증
Azure Storage 계정(V2) abs abs://<storage_account_name>.blob.core.windows.net/<container_name> SQL Server 2022(16.x)부터
계층 구조 네임스페이스가 지원됩니다.
공유 액세스 서명(SAS)
Azure Data Lake Storage Gen2 adls adls://<storage_account_name>.dfs.core.windows.net/<container_name> SQL Server 2022(16.x)부터 공유 액세스 서명(SAS)
SQL Server sqlserver <server_name>[\<instance_name>][:port] SQL Server 2019(15.x)부터 SQL 인증 전용
Oracle oracle <server_name>[:port] SQL Server 2019(15.x)부터 기본 인증 전용입니다.
Teradata teradata <server_name>[:port] SQL Server 2019(15.x)부터 기본 인증 전용입니다.
MongoDB 또는 Cosmos DB API for MongoDB mongodb <server_name>[:port] SQL Server 2019(15.x)부터 기본 인증 전용입니다.
일반 ODBC odbc <server_name>[:port] SQL Server 2019(15.x)부터 - Windows만 해당 기본 인증 전용입니다.
대량 작업 https <storage_account>.blob.core.windows.net/<container> SQL Server 2017(14.x)부터 공유 액세스 서명(SAS)
S3 호환 개체 스토리지 s3 s3://<server_name>:<port>/ SQL Server 2022(16.x)부터 *

* ID가 하드 코딩 IDENTITY = 'S3 Access Key' 되고 SECRET 인수가 형식 = '<AccessKeyID>:<SecretKeyID>' 이거나 STS 권한 부여를 사용하는 데이터베이스 범위 자격 증명이어야 합니다. 자세한 내용은 S3 호환 개체 스토리지의 외부 데이터에 액세스하도록 PolyBase 구성을 참조하세요.

위치 경로:

  • port = 외부 데이터 원본이 수신 대기 중인 포트입니다.
  • <container_name> = 데이터를 보관하는 스토리지 계정의 컨테이너입니다. 루트 컨테이너는 읽기 전용이므로 데이터를 컨테이너에 다시 쓸 수 없습니다.
  • <storage_account> = Azure 리소스의 스토리지 계정 이름입니다.
  • <server_name> = 호스트 이름입니다.
  • <instance_name> = SQL Server 명명된 인스턴스의 이름입니다. 대상 인스턴스에서 SQL Server Browser Service가 실행 중인 경우에 사용됩니다.
  • <ip_address>:<port> = S3 호환 개체 스토리지인 경우에만(SQL Server 2022(16.x)부터) S3 호환 스토리지에 연결하는 데 사용되는 엔드포인트 및 포트입니다.

위치 설정 시 추가 참고 사항 및 지침:

  • SQL Server 데이터베이스 엔진은 개체가 생성될 때 외부 데이터 원본이 존재하는지 확인하지 않습니다. 유효성을 검사하려면 외부 데이터 원본을 사용하여 외부 테이블을 만듭니다.
  • 커넥터를 sqlserver 사용하여 SQL Server 2019(15.x)를 다른 SQL Server 연결하거나 Azure SQL 데이터베이스에 연결할 수 있습니다.
  • ODBC를 통해 연결할 때 Driver={<Name of Driver>}를 지정합니다.
  • adls 접두사를 사용하는 Azure Storage 계정(V2)의 계층 구조 네임스페이스 옵션은 SQL Server 2022(16.x)에서 Azure Data Lake Storage Gen2를 통해 지원됩니다.

CONNECTION_OPTIONS = key_value_pair

SQL Server 2019(15.x) 이상에 지정됩니다. ODBC를 외부 데이터 원본에 연결할 때 추가 옵션을 지정합니다. 여러 연결 옵션을 사용하려면 세미콜론으로 구분합니다.

SQL Server, Oracle, Teradata, MongoDB 및 Azure Cosmos DB API for MongoDB용으로 기본 제공되는 ODBC 커넥터뿐만 아니라 일반 ODBC 연결에 적용됩니다.

key_value_pair는 키워드이며 특정 연결 옵션 값입니다. 사용 가능한 키워드 및 값은 외부 데이터 원본 유형에 따라 달라집니다. 최소한 드라이버 이름이 필요하지만, 설정하면 유용하고 문제 해결에 도움이 되는 APP='<your_application_name>', ApplicationIntent= ReadOnly|ReadWrite 등의 다른 옵션도 있습니다.

가능한 키 값 쌍은 드라이버에 따라 다릅니다. 각 공급자에 대한 자세한 내용은 CREATE EXTERNAL DATA SOURCE(Transact-SQL) CONNECTION_OPTIONS 참조하세요.

PUSHDOWN = ON | OFF

적용 대상: SQL Server 2019(15.x) 이상. 외부 데이터 원본에 푸시 다운할 수 있는지 여부를 알려줍니다. 기본적으로 설정되어 있습니다.

PUSHDOWN은 외부 데이터 원본 수준에서 SQL Server, Oracle, Teradata, MongoDB, Azure Cosmos DB API for MongoDB 또는 ODBC에 연결할 때 지원됩니다.

쿼리 수준에서 푸시 다운을 활성화 또는 비활성화는 힌트를 통해 구현됩니다.

CREDENTIAL = credential_name

외부 데이터 원본에 대해 인증하기 위한 데이터베이스 범위 자격 증명을 지정합니다.

자격 증명 생성 시 추가 참고 사항 및 지침:

공유 액세스 서명을 만드는 방법에는 여러 가지가 있습니다.

  • Azure Portal -Your_Storage_Account> ->< 공유 액세스 서명 - 권한 구성 ->> SAS 및 연결 문자열 생성으로 이동하여 SAS 토큰을 만들 수 있습니다>. 자세한 내용은 공유 액세스 서명 생성을 참조하세요.

  • Azure Storage Explorer 사용하여 SAS를 만들고 구성할 수 있습니다.

  • PowerShell, Azure CLI, .NET 및 REST API를 통해 프로그래밍 방식으로 SAS를 만들 수 있습니다. 자세한 내용은 SAS(공유 액세스 서명)를 사용하여 Azure Storage 리소스에 대한 제한된 액세스 권한 부여를 참조하세요.

  • SAS 토큰은 다음과 같이 구성되어야 합니다.

    • SAS 토큰이 생성되면 토큰의 시작 부분에 물음표('?')가 포함됩니다. SECRET로 구성된 경우 선행 ? 을 제외합니다.
    • 유효한 만료 기간을 사용합니다(모든 날짜는 UTC 시간임).
    • 로드해야 하는 파일에 대해 최소한 읽기 권한을 부여합니다(예: srt=o&sp=r). 다양한 사용 사례에 대해 여러 공유 액세스 서명을 만들 수 있습니다. 권한은 다음과 같이 부여되어야 합니다.
    작업 사용 권한
    파일에서 데이터 읽기 읽기
    여러 파일 및 하위 폴더에서 데이터를 읽습니다. 읽기 및 나열
    외부 테이블 만들기를 선택으로 사용(CETAS) 읽기, 만들기, 나열 및 쓰기
  • Azure Blog Storage Allowed ServicesBlob 경우 SAS 토큰을 생성하려면 확인란을 선택해야 합니다.

  • Azure Data Lake Gen2 Allowed ServicesContainer 경우 및 Object 확인란을 선택하여 SAS 토큰을 생성해야 합니다.

  • TYPE = BLOB_STORAGE인 경우 SHARED ACCESS SIGNATURE를 ID로 사용하여 자격 증명을 만들어야 합니다. 또한 SAS 토큰은 다음과 같이 구성되어야 합니다.

    • 비밀로 구성된 경우 앞에 오는 ?를 제외합니다.
    • 로드해야 하는 파일에 대해 적어도 읽기 권한이 있어야 합니다(예: srt=o&sp=r).
    • 유효한 만료 기간을 사용합니다(모든 날짜는 UTC 시간임).
    • TYPE = BLOB_STORAGE는 대량 작업에만 사용할 수 있습니다. TYPE = BLOB_STORAGE를 사용하여 외부 데이터 원본에 대한 외부 테이블을 만들 수 없습니다.

S3 호환 개체 스토리지 및 PolyBase에서 CREDENTIAL을 사용하는 예제는 S3 호환 개체 스토리지의 외부 데이터에 액세스하도록 PolyBase 구성을 참조하세요.

데이터베이스 범위 지정 자격 증명을 만들려면 CREATE DATABASE SCOPED CREDENTIAL(Transact-SQL)을 참조하세요.

사용 권한

SQL Server의 데이터베이스에 대한 CONTROL 권한이 필요합니다.

잠금

EXTERNAL DATA SOURCE 개체에 대한 공유 잠금을 수행합니다.

보안

PolyBase는 대부분의 외부 데이터 원본에 대해 프록시 기반 인증을 지원합니다. 데이터베이스 범위 자격 증명을 생성하여 프록시 계정을 만듭니다.

SQL Server 2022로 업그레이드

2022년 SQL Server(16.x)부터 Hadoop 외부 데이터 원본은 더 이상 지원되지 않습니다. TYPE = HADOOP를 이용해 이전에 만든 외부 데이터 원본 및 이 외부 데이터 원본을 사용하는 외부 테이블을 수동으로 다시 만들어야 합니다.

또한 사용자는 Azure Storage에 연결할 때 새 커넥터를 사용하도록 외부 데이터 원본도 구성해야 합니다.

외부 데이터 원본 시작 대상
Azure Blob Storage wasb[s] abs
ADLS Gen2 abfs[s] adls

중요

PolyBase를 설치하고 사용하도록 설정하는 방법에 대한 자세한 내용은 Windows에 PolyBase 설치를 참조하세요.

A. Oracle을 참조하는 SQL Server에서 외부 데이터 원본 만들기

Oracle을 참조하는 외부 데이터 원본을 만들려면 데이터베이스 범위 자격 증명이 있는지 확인합니다. 이 데이터 원본에 대한 계산 푸시 다운을 활성화하거나 비활성화할 수도 있습니다.

-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;

-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL OracleProxyAccount
WITH
     IDENTITY = 'oracle_username',
     SECRET = 'oracle_password' ;

CREATE EXTERNAL DATA SOURCE MyOracleServer
WITH
  ( LOCATION = 'oracle://145.145.145.145:1521',
    CREDENTIAL = OracleProxyAccount,
    PUSHDOWN = ON
  ) ;

필요에 따라 Oracle에 대한 외부 데이터 원본은 프록시 인증을 사용하여 세분화된 액세스 제어를 제공할 수 있습니다. 가장된 사용자에 비해 제한된 액세스 권한을 갖도록 프록시 사용자를 구성할 수 있습니다.

CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
WITH IDENTITY = 'oracle_username', SECRET = 'oracle_password';

CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
WITH (LOCATION = 'oracle://145.145.145.145:1521',
CONNECTION_OPTIONS = 'ImpersonateUser=%CURRENT_USER',
CREDENTIAL = [OracleProxyCredential]);

B. Polybase 연결을 통해 SQL Server 명명된 인스턴스를 참조하는 외부 데이터 원본 만들기

적용 대상: SQL Server 2019(15.x) 이상

CONNECTION_OPTIONS의 명명된 인스턴스를 참조하는 외부 데이터 원본을 만들려면 SQL Server를 사용하여 인스턴스 이름을 지정합니다.

먼저 데이터베이스 범위 자격 증명을 만들고 SQL 인증된 로그인에 대한 자격 증명을 저장합니다. PolyBase용 SQL ODBC 커넥터는 기본 인증만 지원하고 Kerberos 인증은 지원하지 않습니다. 데이터베이스 범위 자격 증명을 만들기 전에 자격 증명을 보호하려면 데이터베이스에 마스터 키가 있어야 합니다. 자세한 내용은 CREATE MASTER KEY를 참조하세요. 다음 샘플에서는 데이터베이스 범위 자격 증명을 만들고 사용자 고유의 로그인 및 암호를 제공합니다.

CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username', SECRET = 'password';

아래 예제에서 WINSQL2019는 호스트 이름이고 SQL2019는 인스턴스 이름입니다. 'Server=%s\SQL2019'는 키 값 쌍입니다.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
  LOCATION = 'sqlserver://WINSQL2019' ,
  CONNECTION_OPTIONS = 'Server=%s\SQL2019' ,
  CREDENTIAL = SQLServerCredentials
) ;

또는 포트를 사용하여 SQL Server 기본 인스턴스에 연결할 수 있습니다.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
  LOCATION = 'sqlserver://WINSQL2019:58137',
  CREDENTIAL = SQLServerCredentials
) ;

C. Always On 가용성 그룹의 읽기 가능한 보조 복제본을 참조하는 외부 데이터 원본 만들기

적용 대상: SQL Server 2019(15.x) 이상

SQL Server의 읽기 가능한 보조 복제본을 참조하는 외부 데이터 원본을 만들려면 CONNECTION_OPTIONS을(를) 사용하여 ApplicationIntent=ReadOnly을(를) 지정합니다.

먼저 데이터베이스 범위 자격 증명을 만들고 SQL 인증된 로그인에 대한 자격 증명을 저장합니다. PolyBase용 SQL ODBC 커넥터는 기본 인증만 지원하고 Kerberos 인증은 지원하지 않습니다. 데이터베이스 범위 자격 증명을 만들기 전에 자격 증명을 보호하려면 데이터베이스에 마스터 키가 있어야 합니다. 자세한 내용은 CREATE MASTER KEY를 참조하세요. 다음 샘플에서는 데이터베이스 범위 자격 증명을 만들고 사용자 고유의 로그인 및 암호를 제공합니다.

CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username', SECRET = 'password';

다음으로 새 외부 데이터 원본을 만듭니다.

ODBC Database 매개 변수는 필요하지 않습니다. 대신 LOCATION 매개 변수 내에서 CREATE EXTERNAL TABLE 문의 세 부분으로 된 이름을 통해 데이터베이스 이름을 제공합니다. 예제는 외부 테이블 만들기를 참조하세요.

아래 WINSQL2019AGL 예제는 가용성 그룹 수신기 이름이며 dbname은(는) CREATE EXTERNAL TABLE 문의 대상이 될 데이터베이스의 이름입니다.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
  LOCATION = 'sqlserver://WINSQL2019AGL' ,
  CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly' ,
  CREDENTIAL = SQLServerCredentials
);

시스템 뷰 sys.servers에서 ApplicationIntent을(를) 지정하고 외부 테이블을 만들어 가용성 그룹의 리디렉션 동작을 보여 줄 수 있습니다. 다음 샘플 스크립트에서는 두 개의 외부 데이터 원본이 만들어지고 각각에 대해 하나의 외부 테이블이 만들어집니다. 뷰를 사용하여 연결에 응답하는 서버를 테스트합니다. 읽기 전용 라우팅 기능을 통해 유사한 결과를 달성할 수도 있습니다. 자세한 내용은 Always On 가용성 그룹에 대한 읽기 전용 라우팅 구성을 참조하세요.

CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
  LOCATION = 'sqlserver://WINSQL2019AGL' ,
  CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly' ,
  CREDENTIAL = [SQLServerCredentials]);
GO
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
  LOCATION = 'sqlserver://WINSQL2019AGL' ,
  CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite' ,
  CREDENTIAL = [SQLServerCredentials]);
GO

가용성 그룹의 데이터베이스 내에서 sys.servers을(를) 반환할 뷰와 로컬 인스턴스의 이름을 만들어 쿼리에 응답하는 복제본을 식별할 수 있습니다. 자세한 내용은 sys.servers를 참조하세요.

CREATE VIEW vw_sys_servers AS
SELECT [name] FROM sys.servers
WHERE server_id = 0;
GO

그런 다음 원본 인스턴스에 외부 테이블을 만듭니다.

CREATE EXTERNAL TABLE vw_sys_servers_ro
(    name sysname NOT NULL )
WITH (DATA_SOURCE = [DataSource_SQLInstanceListener_ReadOnlyIntent], LOCATION = N'dbname.dbo.vw_sys_servers');
GO
CREATE EXTERNAL TABLE vw_sys_servers_rw
(    name sysname NOT NULL)
WITH (DATA_SOURCE = [DataSource_SQLInstanceListener_ReadWriteIntent], LOCATION = N'dbname.dbo.vw_sys_servers');
GO
SELECT [name] FROM dbo.vw_sys_servers_ro; --should return secondary replica instance
SELECT [name] FROM dbo.vw_sys_servers_rw; --should return primary replica instance
GO

D. S3 호환 개체 스토리지에서 PolyBase를 통해 parquet 파일을 쿼리하기 위한 외부 데이터 원본 만들기

적용 대상: SQL Server 2022(16.x) 이상

다음 샘플 스크립트는 SQL Server의 원본 사용자 데이터베이스에 s3_ds 외부 데이터 원본을 만듭니다. 외부 데이터 원본은 s3_dc 데이터베이스 범위 자격 증명을 참조합니다.

CREATE DATABASE SCOPED CREDENTIAL s3_dc
WITH
    IDENTITY = 'S3 Access Key', -- for S3-compatible object storage the identity must always be S3 Access Key
    SECRET = <access_key_id>:<secret_key_id> -- provided by the S3-compatible object storage
GO

CREATE EXTERNAL DATA SOURCE s3_ds
WITH
(   LOCATION = 's3://<ip_address>:<port>/'
,   CREDENTIAL = s3_dc
);
GO

sys.external_data_sources를 사용하여 새 외부 데이터 원본을 확인합니다.

SELECT * FROM sys.external_data_sources;

그런 다음, 다음 예제에서는 T-SQL을 사용하여 OPENROWSET 쿼리를 통해 S3 호환 개체 스토리지에 저장된 parquet 파일을 쿼리하는 방법을 보여 줍니다. 자세한 내용은 PolyBase를 사용하여 S3 호환 개체 스토리지에서 parquet 파일 가상화를 참조하세요.

SELECT  *
FROM    OPENROWSET
        (   BULK '/<bucket>/<parquet_folder>'
        ,   FORMAT       = 'PARQUET'
        ,   DATA_SOURCE  = 's3_ds'
        ) AS [cc];

E. 일반 ODBC에서 PostgreSQL로 외부 데이터 원본 만들기

이전 예제와 같이 먼저 데이터베이스 마스터 키 및 데이터베이스 범위 자격 증명을 만듭니다. 데이터베이스 범위 자격 증명은 외부 데이터 원본에 사용됩니다. 또한 이 예제에서는 PostgreSQL용 제네릭 ODBC 데이터 공급자가 서버에 설치되어 있다고 가정합니다.

이 예제에서는 일반 ODBC 데이터 공급자를 사용하여 동일한 네트워크의 PostgreSQL 데이터베이스 서버에 연결합니다. 여기서 PostgreSQL 서버의 정규화된 도메인 이름은 TCP 5432의 기본 포트를 사용하여 입니다 POSTGRES1.

CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH
(
 LOCATION = 'odbc://POSTGRES1.domain:5432'
,CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};'
,CREDENTIAL = postgres_credential
)

Azure Storage

공유 액세스 서명 만들기

Azure Blob Storage 및 Azure Data Lake Gen2 모두에서 지원되는 인증 방법은 SAS(공유 액세스 서명)입니다. 공유 액세스 서명 토큰을 생성하는 간단한 방법 중 하나는 아래 단계를 따릅니다. 자세한 내용은 CREDENTIAL을 참조하세요.

  1. Azure Portal 원하는 Storage 계정으로 이동합니다.
  2. 데이터 스토리지 메뉴에서 원하는 컨테이너로 이동합니다.
  3. 공유 액세스 토큰을 선택합니다.
  4. 원하는 작업에 따라 적절한 사용 권한을 선택합니다. 참고로 테이블 벨로우를 사용합니다.
작업 사용 권한
파일에서 데이터 읽기 읽기
여러 파일 및 하위 폴더에서 데이터를 읽습니다. 읽기 및 목록
외부 테이블 만들기를 선택으로 사용(CETAS) 읽기, 만들기 및 쓰기
  1. 토큰 만료 날짜를 선택합니다.
  2. SAS 토큰 및 URL을 생성합니다.
  3. SAS 토큰을 복사합니다.

F. abs:// 인터페이스를 사용하여 Azure Blob Storage 데이터에 액세스하는 외부 데이터 원본 만들기

적용 대상: SQL Server 2022(16.x) 이상

SQL Server 2022(16.x)부터 Azure Storage 계정 v2에 새 접두사 abs를 사용합니다. abs 접두사는 를 사용하여 SHARED ACCESS SIGNATURE인증을 지원합니다. abs 접두사는 이전 버전에서 사용된 wasb 접두사를 대체합니다. HADOOP는 더 이상 지원되지 않으므로 를 더 이상 사용할 TYPE = BLOB_STORAGE필요가 없습니다.

다음 예제에서 볼 수 있듯 Azure Storage 계정 키가 더 이상 필요하지 않고 대신 SAS 토큰을 사용합니다.

-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;
GO
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredentialv2
WITH
  IDENTITY = 'SHARED ACCESS SIGNATURE', -- to use SAS the identity must be fixed as-is
  SECRET = '<Blob_SAS_Token>' ;
GO
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH
  ( LOCATION = 'abs://<storage_account_name>.blob.core.windows.net/<container>' ,
    CREDENTIAL = AzureStorageCredentialv2,
  ) ;

Azure Blob Storage 저장된 CSV 파일에 액세스하는 방법에 대한 자세한 예제는 PolyBase를 사용하여 CSV 파일 가상화를 참조하세요.

G. Azure Data Lake Gen2에서 데이터에 액세스하는 외부 데이터 원본 만들기

적용 대상: SQL Server 2022(16.x) 이상

SQL Server 2022(16.x)부터 Azure Data Lake Gen2에 대해 새 접두사 adlsabfs(이전 버전에서 사용됨) 대신 사용합니다. adls 접두사는 아래 예제와 같이 SAS 토큰을 인증 방법으로 지원합니다.

--Create a database scoped credential using SAS Token
CREATE DATABASE SCOPED CREDENTIAL datalakegen2
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<DataLakeGen2_SAS_Token>';
GO
CREATE EXTERNAL DATA SOURCE data_lake_gen2_dfs
WITH
(
LOCATION = 'adls://<storage_account>.dfs.core.windows.net'
,CREDENTIAL = datalakegen2
)

Azure Data Lake Gen2에 저장된 델타 파일에 액세스하는 방법에 대한 자세한 예제는 PolyBase를 사용하여 델타 테이블 가상화를 참조하세요.

예제: 대량 작업

중요

대량 작업을 위해 외부 데이터 원본을 구성할 때 LOCATION URL 끝에 추적 / , 파일 이름 또는 공유 액세스 서명 매개 변수를 추가하지 마세요.

H. Azure Storage에서 데이터를 검색하는 대량 작업을 위한 외부 데이터 원본 만들기

적용 대상: SQL Server 2017(14.x) 이상

BULK INSERT 또는 OPENROWSET을 사용하여 대량 작업에 대한 다음 데이터 원본을 만듭니다. 자격 증명은 SHARED ACCESS SIGNATURE를 ID로 설정해야 하며 SAS 토큰에서 앞에 ?가 없어야 하며, 적어도 로드할 파일에 대한 읽기 권한이 있어야 하고(예: srt=o&sp=r) 만료 기간이 유효해야 합니다(모든 날짜는 UTC 시간임). 공유 액세스 서명에 대한 자세한 내용은 SAS(공유 액세스 서명) 사용을 참조하세요.

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH
  IDENTITY = 'SHARED ACCESS SIGNATURE',
  -- Remove ? from the beginning of the SAS token
  SECRET = '<azure_shared_access_signature>' ;

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH
  ( LOCATION = 'https://newinvoices.blob.core.windows.net/week3' ,
    CREDENTIAL = AccessAzureInvoices ,
    TYPE = BLOB_STORAGE
  ) ;

다음 단계

* SQL Database *  

 

개요: Azure SQL Database

적용 대상:Azure SQL 데이터베이스

탄력적 쿼리에 대한 외부 데이터 원본을 만듭니다. 외부 데이터 원본은 연결을 설정하고 다음과 같은 기본 사용 사례를 지원하는 데 사용됩니다.

  • BULK INSERT 또는 OPENROWSET를 사용한 대량 로드 작업
  • 탄력적 쿼리로 SQL Database를 사용하여 원격 SQL Database 또는 Azure Synapse 인스턴스 쿼리
  • 탄력적 쿼리를 사용하여 분할된 SQL Database 쿼리

Syntax

구문 표기 규칙에 대한 자세한 내용은 Transact-SQL 구문 표기 규칙을 참조하세요.

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] TYPE = { BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER } ]
    [ [ , ] DATABASE_NAME = '<database_name>' ]
    [ [ , ] SHARD_MAP_NAME = '<shard_map_manager>' ] )
[ ; ]

인수

data_source_name

데이터 원본에 대한 사용자 정의 이름을 지정합니다. 이름은 SQL 데이터베이스의 데이터베이스 내에서 고유해야 합니다.

LOCATION = '<prefix>://<path[:port]>'

외부 데이터 원본에 대한 연결 프로토콜 및 경로를 제공합니다.

외부 데이터 원본 커넥터 위치 접두사 위치 경로 가용성
대량 작업 https <storage_account>.blob.core.windows.net/<container>
탄력적 쿼리(분할) 필요하지 않음 <shard_map_server_name>.database.windows.net
탄력적 쿼리(원격) 필요하지 않음 <remote_server_name>.database.windows.net
EdgeHub edgehub edgehub:// Azure SQL Edge에서만 사용할 수 있습니다. EdgeHub는 항상 Azure SQL Edge 인스턴스에 대해 로컬입니다. 따라서 경로 또는 포트 값을 지정할 필요가 없습니다.
Kafka kafka kafka://<kafka_bootstrap_server_name_ip>:<port_number> Azure SQL Edge에서만 사용할 수 있습니다.

위치 경로:

  • <shard_map_server_name> = 분할된 맵 관리자를 호스팅하는 Azure의 논리 서버 이름입니다. DATABASE_NAME 인수는 분할된 맵을 호스트하는 데 사용되는 데이터베이스를 제공하고 SHARD_MAP_NAME은 분할된 맵 자체에 사용됩니다.
  • <remote_server_name> = 탄력적 쿼리에 대한 대상 논리 서버 이름입니다. 데이터베이스 이름은 DATABASE_NAME 인수를 사용하여 지정됩니다.

위치 설정 시 추가 참고 사항 및 지침:

  • 데이터베이스 엔진은 개체가 생성될 때 외부 데이터 원본이 존재하는지 확인하지 않습니다. 유효성을 검사하려면 외부 데이터 원본을 사용하여 외부 테이블을 만듭니다.

CREDENTIAL = credential_name

외부 데이터 원본에 대해 인증하기 위한 데이터베이스 범위 자격 증명을 지정합니다.

자격 증명 생성 시 추가 참고 사항 및 지침:

  • Azure Storage에서 Azure SQL Database로 데이터를 로드하려면 SAS 토큰(공유 액세스 서명)을 사용합니다.
  • CREDENTIAL은 데이터 보안이 설정된 경우에만 필요합니다. 익명 액세스를 허용하는 데이터 세트에는 CREDENTIAL이 필요하지 않습니다.
  • TYPE = BLOB_STORAGE인 경우 SHARED ACCESS SIGNATURE를 ID로 사용하여 자격 증명을 만들어야 합니다.
  • WASB[s] 커넥터를 통해 Azure Storage에 연결하는 경우 SAS(공유 액세스 서명)가 아닌 스토리지 계정 키로 인증을 수행해야 합니다.
  • TYPE = HADOOP인 경우 스토리지 계정 키를 SECRET으로 사용하여 자격 증명을 만들어야 합니다.
  • TYPE = BLOB_STORAGE는 대량 작업에만 사용할 수 있습니다. TYPE = BLOB_STORAGE를 사용하여 외부 데이터 원본에 대한 외부 테이블을 만들 수 없습니다.

공유 액세스 서명을 만드는 방법에는 여러 가지가 있습니다.

  • Azure Portal -Your_Storage_Account> ->< 공유 액세스 서명 - 권한 구성 ->> SAS 및 연결 문자열 생성으로 이동하여 SAS 토큰을 만들 수 있습니다>. 자세한 내용은 공유 액세스 서명 생성을 참조하세요.

  • Azure Storage Explorer 사용하여 SAS를 만들고 구성할 수 있습니다.

  • PowerShell, Azure CLI, .NET 및 REST API를 통해 프로그래밍 방식으로 SAS를 만들 수 있습니다. 자세한 내용은 SAS(공유 액세스 서명)를 사용하여 Azure Storage 리소스에 대한 제한된 액세스 권한 부여를 참조하세요.

  • SAS 토큰은 다음과 같이 구성되어야 합니다.

    • SAS 토큰이 생성되면 토큰의 시작 부분에 물음표('?')가 포함됩니다. SECRET로 구성된 경우 선행 ? 을 제외합니다.
    • 유효한 만료 기간을 사용합니다(모든 날짜는 UTC 시간임).
    • 로드해야 하는 파일에 대해 최소한 읽기 권한을 부여합니다(예: srt=o&sp=r). 다양한 사용 사례에 대해 여러 공유 액세스 서명을 만들 수 있습니다. 권한은 다음과 같이 부여되어야 합니다.
    작업 사용 권한
    파일에서 데이터 읽기 읽기
    여러 파일 및 하위 폴더에서 데이터를 읽습니다. 읽기 및 목록
    외부 테이블 만들기를 선택으로 사용(CETAS) 읽기, 만들기 및 쓰기

SHARED ACCESS SIGNATURETYPE = BLOB_STORAGE에서 CREDENTIAL을 사용하는 예제는 대량 작업을 실행하고 Azure Storage에서 SQL Database로 데이터를 검색하기 위한 외부 데이터 원본 만들기를 참조하세요.

데이터베이스 범위 지정 자격 증명을 만들려면 CREATE DATABASE SCOPED CREDENTIAL(Transact-SQL)을 참조하세요.

TYPE = [ BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER]

구성 중인 외부 데이터 원본의 유형을 지정합니다. 이 매개 변수가 항상 필요한 것은 아닙니다.

  • SQL Database에서 탄력적 쿼리를 통해 데이터베이스 간 쿼리에 RDBMS를 사용합니다.
  • 분할된 SQL Database에 연결할 때 외부 데이터 원본을 만드는 경우 SHARD_MAP_MANAGER를 사용합니다.
  • BULK INSERT 또는 OPENROWSET를 통해 대량 작업을 실행하는 경우 BLOB_STORAGE를 사용합니다.

중요

기타 외부 데이터 원본을 사용하는 경우 TYPE을 설정하지 마세요.

DATABASE_NAME = database_name

TYPERDBMS 또는 SHARD_MAP_MANAGER로 설정된 경우 이 인수를 구성합니다.

TYPE DATABASE_NAME의 값
RDBMS LOCATION을 사용하여 제공된 서버의 원격 데이터베이스 이름
SHARD_MAP_MANAGER 분할된 맵 관리자로 작동하는 데이터베이스의 이름

TYPE = RDBMS에서 외부 데이터 원본을 만드는 방법을 보여주는 예제는 RDBMS 외부 데이터 원본 만들기를 참조하세요.

SHARD_MAP_NAME = shard_map_name

TYPE 인수가 SHARD_MAP_MANAGER로 설정된 경우에만 분할된 맵의 이름을 설정하는 데 사용됩니다.

TYPE = SHARD_MAP_MANAGER에서 외부 데이터 원본을 만드는 방법을 보여주는 예제는 분할된 맵 관리자 외부 데이터 원본 만들기를 참조하세요.

사용 권한

Azure SQL Database의 데이터베이스에 대한 CONTROL 권한이 필요합니다.

잠금

EXTERNAL DATA SOURCE 개체에 대한 공유 잠금을 수행합니다.

예제

A. 분할된 맵 관리자 외부 데이터 원본 만들기

SHARD_MAP_MANAGER를 참조하는 외부 데이터 원본을 만들려면 가상 머신의 SQL Database 또는 SQL Server 데이터베이스에서 분할된 맵 관리자를 호스트하는 SQL Database 서버 이름을 지정합니다.

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;

CREATE DATABASE SCOPED CREDENTIAL ElasticDBQueryCred
WITH
  IDENTITY = '<username>',
  SECRET = '<password>' ;

CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc
WITH
  ( TYPE = SHARD_MAP_MANAGER ,
    LOCATION = '<server_name>.database.windows.net' ,
    DATABASE_NAME = 'ElasticScaleStarterKit_ShardMapManagerDb' ,
    CREDENTIAL = ElasticDBQueryCred ,
    SHARD_MAP_NAME = 'CustomerIDShardMap'
  ) ;

단계별 자습서는 분할을 위한 탄력적 쿼리 시작(수평 분할)을 참조하세요.

B. RDBMS 외부 데이터 원본 만들기

RDBMS를 참조하는 외부 데이터 원본을 만들려면 SQL Database에 있는 원격 데이터베이스의 SQL Database 서버 이름을 지정합니다.

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;

CREATE DATABASE SCOPED CREDENTIAL SQL_Credential
WITH
  IDENTITY = '<username>' ,
  SECRET = '<password>' ;

CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc
WITH
  ( TYPE = RDBMS ,
    LOCATION = '<server_name>.database.windows.net' ,
    DATABASE_NAME = 'Customers' ,
    CREDENTIAL = SQL_Credential
  ) ;

RDBMS에 대한 단계별 자습서는 데이터베이스 간 쿼리 시작(수직 분할)을 참조하세요.

예제: 대량 작업

중요

대량 작업을 위해 외부 데이터 원본을 구성할 때 LOCATION URL 끝에 추적 / , 파일 이름 또는 공유 액세스 서명 매개 변수를 추가하지 마세요.

C. Azure Storage에서 데이터를 검색하는 대량 작업을 위한 외부 데이터 원본 만들기

BULK INSERT 또는 OPENROWSET을 사용하여 대량 작업에 대한 다음 데이터 원본을 만듭니다. 자격 증명은 SHARED ACCESS SIGNATURE를 ID로 설정해야 하며 SAS 토큰에서 앞에 ?가 없어야 하며, 적어도 로드할 파일에 대한 읽기 권한이 있어야 하고(예: srt=o&sp=r) 만료 기간이 유효해야 합니다(모든 날짜는 UTC 시간임). 공유 액세스 서명에 대한 자세한 내용은 SAS(공유 액세스 서명) 사용을 참조하세요.

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH
  IDENTITY = 'SHARED ACCESS SIGNATURE',
  -- Remove ? from the beginning of the SAS token
  SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z***************' ;

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH
  ( LOCATION = 'https://newinvoices.blob.core.windows.net/week3' ,
    CREDENTIAL = AccessAzureInvoices ,
    TYPE = BLOB_STORAGE
  ) ;

사용 중인 이 예제를 보려면 BULK INSERT를 참조하세요.

예제: Azure SQL Edge

중요

Azure SQL Edge의 외부 데이터를 구성하는 방법에 대한 자세한 내용은 Azure SQL Edge에서 데이터 스트리밍을 참조하세요.

A. Kafka를 참조하는 외부 데이터 원본 만들기

적용 대상:Azure SQL Edge만 해당

이 예제에서 외부 데이터 원본은 IP 주소가 xxx.xxx.xxx.xxx이고 포트 1900에서 수신 대기하는 Kafka 서버입니다. Kafka 외부 데이터 원본은 데이터 스트리밍 전용이며 조건자 푸시다운을 지원하지 않습니다.

-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyKafkaServer WITH (
    LOCATION = 'kafka://xxx.xxx.xxx.xxx:1900'
)
GO

B. EdgeHub를 참조하는 외부 데이터 원본 만들기

적용 대상:Azure SQL Edge만 해당

이 예제에서 외부 데이터 원본은 Azure SQL Edge와 동일한 에지 디바이스에서 실행되는 EdgeHub입니다. EdgeHub 외부 데이터 원본은 데이터 스트리밍 전용이며 조건자 푸시다운을 지원하지 않습니다.

-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyEdgeHub WITH (
    LOCATION = 'edgehub://'
)
go

다음 단계

* Azure Synapse
Analytics *
 

 

개요: Azure Synapse Analytics

적용 대상:Azure Synapse 분석

PolyBase에 대한 외부 데이터 원본을 만듭니다. 외부 데이터 원본은 연결을 설정하고 PolyBase를 사용하여 데이터 가상화 및 데이터 로드라는 기본 사용 사례를 지원하는 데 사용됩니다.

중요

탄력적 쿼리로 Azure SQL Database를 사용하여 Azure Synapse Analytics 리소스를 쿼리하는 외부 데이터 원본을 만들려면 SQL Database를 참조하세요.

구문

구문 표기 규칙에 대한 자세한 내용은 Transact-SQL 구문 표기 규칙을 참조하세요.

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] TYPE = HADOOP ]
[ ; ]

인수

data_source_name

데이터 원본에 대한 사용자 정의 이름을 지정합니다. 이 이름은 Azure Synapse Analytics의 Azure SQL Database 내에서 고유해야 합니다.

LOCATION = '<prefix>://<path[:port]>'

외부 데이터 원본에 대한 연결 프로토콜 및 경로를 제공합니다.

외부 데이터 원본 커넥터 위치 접두사 위치 경로
Azure Data Lake Store Gen 1 adl <storage_account>.azuredatalake.net
Azure Data Lake Store Gen2 abfs[s] <container>@<storage_account>.dfs.core.windows.net
Azure V2 Storage 계정 wasb[s] <container>@<storage_account>.blob.core.windows.net

위치 경로:

  • <container> = 데이터를 보관하는 스토리지 계정의 컨테이너입니다. 루트 컨테이너는 읽기 전용이므로 데이터를 컨테이너에 다시 쓸 수 없습니다.
  • <storage_account> = Azure 리소스의 스토리지 계정 이름입니다.

위치 설정 시 추가 참고 사항 및 지침:

  • Azure Data Lake Storage Gen2를 프로비저닝할 때 기본 옵션은 enable secure SSL connections를 사용하는 것입니다. 이 기능을 사용하도록 설정한 경우 보안 TLS/SSL 연결을 선택할 때 abfss를 사용해야 합니다. abfss는 보안되지 않은 TLS/ 연결에서도 작동합니다. 자세한 내용은 ABFS(Azure Blob 파일 시스템) 드라이버를 참조하세요.
  • Azure Synapse는 개체가 생성될 때 외부 데이터 원본이 존재하는지 확인하지 않습니다. 유효성을 검사하려면 외부 데이터 원본을 사용하여 외부 테이블을 만듭니다.
  • 일관된 쿼리 의미 체계를 보장하기 위해 Hadoop을 쿼리할 때 모든 테이블에 대해 동일한 외부 데이터 원본을 사용합니다.
  • wasbs는 데이터가 보안 TLS 연결을 사용하여 전송되므로 권장됩니다.
  • 계층 구조 네임스페이스는 wasb:// 인터페이스를 사용하여 PolyBase를 통해 데이터에 액세스하는 경우 Azure V2 Storage 계정에서 지원되지 않습니다.

CREDENTIAL = credential_name

외부 데이터 원본에 대해 인증하기 위한 데이터베이스 범위 자격 증명을 지정합니다.

자격 증명 생성 시 추가 참고 사항 및 지침:

  • Azure Storage 또는 ADLS(Azure Data Lake Store) Gen2에서 Azure Synapse Analytics로 데이터를 로드하려면 Azure Storage 키를 사용합니다.
  • CREDENTIAL은 데이터 보안이 설정된 경우에만 필요합니다. 익명 액세스를 허용하는 데이터 세트에는 CREDENTIAL이 필요하지 않습니다.

데이터베이스 범위 지정 자격 증명을 만들려면 CREATE DATABASE SCOPED CREDENTIAL(Transact-SQL)을 참조하세요.

TYPE = HADOOP

구성 중인 외부 데이터 원본의 유형을 지정합니다. 이 매개 변수가 항상 필요한 것은 아닙니다.

외부 데이터 원본이 Azure Storage, ADLS Gen 1 또는 ADLS Gen2인 경우 HADOOP를 사용합니다.

TYPE = HADOOP을 사용하여 Azure Storage에서 데이터를 로드하는 방법에 대한 예제를 보려면 서비스 주체를 사용하여 Azure Data Lake Store Gen 1 또는 2를 참조하는 외부 데이터 원본 만들기를 참조하세요.

사용 권한

데이터베이스에 대한 CONTROL 권한이 필요합니다.

잠금

EXTERNAL DATA SOURCE 개체에 대한 공유 잠금을 수행합니다.

보안

PolyBase는 대부분의 외부 데이터 원본에 대해 프록시 기반 인증을 지원합니다. 데이터베이스 범위 자격 증명을 생성하여 프록시 계정을 만듭니다.

SAS(공유 액세스 서명) 키는 Azure Data Lake Store Gen 2 Storage 계정에 인증하는 데 지원됩니다. 공유 액세스 서명을 사용하여 인증하려는 고객은 SAS 토큰을 비밀로 입력할 데이터베이스 범위 자격 증명 IDENTITY = "Shared Access Signature" 을 만들어야 합니다.

여기서 데이터베이스 범위 자격 증명 IDENTITY = "Shared Access Signature" 을 만들고 스토리지 키 값을 비밀로 사용하는 경우 다음 오류 메시지가 표시됩니다.

'HdfsBridge::isDirExist - Unexpected error encountered checking whether directory exists or not: AbfsRestOperationException: Operation failed: "Server failed to authenticate the request. Please refer to the information in the www-authenticate header.", 401, HEAD, [Storage path URL]'

예제

A. wasb://인터페이스를 사용하여 Azure Storage의 데이터에 액세스하는 외부 데이터 원본 만들기

이 예제에서 외부 데이터 원본은 logs라는 Azure V2 Storage 계정입니다. 스토리지 컨테이너를 daily라고 합니다. Azure Storage 외부 데이터 원본은 데이터 전송 전용입니다. 조건자 푸시 다운을 지원하지 않습니다. 계층 구조 네임스페이스는 wasb:// 인터페이스를 통해 데이터에 액세스하는 경우 지원되지 않습니다. WASB 커넥터를 통해 Azure Storage에 연결할 때는 SAS(공유 액세스 서명)가 아닌 스토리지 계정 키를 사용하여 인증을 수행해야 합니다.

이 예제에서는 Azure Storage에 대한 인증을 위해 데이터베이스 범위 자격 증명을 만드는 방법을 보여 줍니다. 데이터베이스 자격 증명 비밀에 Azure Storage 계정 키를 지정합니다. Azure 스토리지에 대한 인증 중에는 사용되지 않으므로 데이터베이스 범위 지정 자격 증명 ID에 문자열을 지정할 수 있습니다.

-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;

-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH
  IDENTITY = '<my_account>',
  SECRET = '<azure_storage_account_key>' ;

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH
  ( LOCATION = 'wasbs://daily@logs.blob.core.windows.net/' ,
    CREDENTIAL = AzureStorageCredential ,
    TYPE = HADOOP
  ) ;

B. Azure Data Lake Store Gen 1 또는 2를 참조하거나 서비스 주체를 사용하여 외부 데이터 소스를 생성합니다.

Azure Data Lake Store 연결은 ADLS URI 및 Azure Active Directory 애플리케이션의 서비스 주체를 기반으로 할 수 있습니다. 이 애플리케이션을 만들기 위한 설명서는 Active Directory를 사용한 Data Lake Store 인증에서 찾을 수 있습니다.

-- If you do not have a Master Key on your DW you will need to create one.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;

-- These values come from your Azure Active Directory Application used to authenticate to ADLS
CREATE DATABASE SCOPED CREDENTIAL ADLS_credential
WITH
  -- IDENTITY = '<clientID>@<OAuth2.0TokenEndPoint>' ,
  IDENTITY = '536540b4-4239-45fe-b9a3-629f97591c0c@https://login.microsoftonline.com/42f988bf-85f1-41af-91ab-2d2cd011da47/oauth2/token' ,
  -- SECRET = '<KEY>'
  SECRET = 'BjdIlmtKp4Fpyh9hIvr8HJlUida/seM5kQ3EpLAmeDI='
;

-- For Gen 1 - Create an external data source
-- TYPE: HADOOP - PolyBase uses Hadoop APIs to access data in Azure Data Lake Storage.
-- LOCATION: Provide Data Lake Storage Gen 1 account name and URI
-- CREDENTIAL: Provide the credential created in the previous step
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH
  ( LOCATION = 'adl://newyorktaxidataset.azuredatalakestore.net' ,
    CREDENTIAL = ADLS_credential ,
    TYPE = HADOOP
  ) ;

-- For Gen2 - Create an external data source
-- TYPE: HADOOP - PolyBase uses Hadoop APIs to access data in Azure Data Lake Storage.
-- LOCATION: Provide Data Lake Storage Gen2 account name and URI
-- CREDENTIAL: Provide the credential created in the previous step
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH
  -- Please note the abfss endpoint when your account has secure transfer enabled
  ( LOCATION = 'abfss://data@newyorktaxidataset.dfs.core.windows.net' ,
    CREDENTIAL = ADLS_credential ,
    TYPE = HADOOP
  ) ;

C. 스토리지 계정 키를 사용하여 Azure Data Lake Store Gen2를 참조하는 외부 데이터 원본 만들기

-- If you do not have a Master Key on your DW you will need to create one.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;

CREATE DATABASE SCOPED CREDENTIAL ADLS_credential
WITH
-- IDENTITY = '<storage_account_name>' ,
  IDENTITY = 'newyorktaxidata' ,
-- SECRET = '<storage_account_key>'
  SECRET = 'yz5N4+bxSb89McdiysJAzo+9hgEHcJRJuXbF/uC3mhbezES/oe00vXnZEl14U0lN3vxrFKsphKov16C0w6aiTQ=='
;

-- Note this example uses a Gen2 secured endpoint (abfss)
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( LOCATION = 'abfss://2013@newyorktaxidataset.dfs.core.windows.net' ,
    CREDENTIAL = ADLS_credential ,
    TYPE = HADOOP
  ) ;

D. abfs:// 사용하여 Azure Data Lake Store Gen2에 대한 PolyBase 연결을 참조하는 외부 데이터 원본 만들기

관리 ID 메커니즘으로 Azure Data Lake Store Gen2 계정에 연결할 경우 SECRET을 지정할 필요가 없습니다.

-- If you do not have a Master Key on your DW you will need to create one
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;

--Create database scoped credential with **IDENTITY = 'Managed Service Identity'**

CREATE DATABASE SCOPED CREDENTIAL msi_cred
WITH IDENTITY = 'Managed Service Identity' ;

--Create external data source with abfss:// scheme for connecting to your Azure Data Lake Store Gen2 account

CREATE EXTERNAL DATA SOURCE ext_datasource_with_abfss
WITH
  ( TYPE = HADOOP ,
    LOCATION = 'abfss://myfile@mystorageaccount.dfs.core.windows.net' ,
    CREDENTIAL = msi_cred
  ) ;

다음 단계

* Analytics
플랫폼 시스템(PDW) *
 

 

개요: 분석 플랫폼 시스템

적용 대상:분석 플랫폼 시스템(PDW)

PolyBase 쿼리에 대한 외부 데이터 원본을 만듭니다. 외부 데이터 원본은 연결을 설정하고 다음과 같은 사용 사례를 지원하는 데 사용됩니다. PolyBase를 사용하여 데이터 가상화 및 데이터 로드.

Syntax

구문 표기 규칙에 대한 자세한 내용은 Transact-SQL 구문 표기 규칙을 참조하세요.

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] TYPE = HADOOP ]
    [ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]

인수

data_source_name

데이터 원본에 대한 사용자 정의 이름을 지정합니다. 이름은 Analytics Platform System(PDW)의 서버 내에서 반드시 고유해야 합니다.

LOCATION = '<prefix>://<path[:port]>'

외부 데이터 원본에 대한 연결 프로토콜 및 경로를 제공합니다.

외부 데이터 원본 커넥터 위치 접두사 위치 경로
Cloudera CDH 또는 Hortonworks HDP hdfs <Namenode>[:port]
Azure Storage 계정 wasb[s] <container>@<storage_account>.blob.core.windows.net

위치 경로:

  • <Namenode> = Hadoop 클러스터에 있는 Namenode의 머신 이름, 이름 서비스 URI 또는 IP 주소입니다. PolyBase는 Hadoop 클러스터에서 사용하는 모든 DNS 이름을 확인해야 합니다.
  • port = 외부 데이터 원본이 수신 대기 중인 포트입니다. Hadoop에서는 fs.defaultFS 구성 매개 변수를 사용하여 포트를 찾을 수 있습니다. 기본값은 8020입니다.
  • <container> = 데이터를 보관하는 스토리지 계정의 컨테이너입니다. 루트 컨테이너는 읽기 전용이므로 데이터를 컨테이너에 다시 쓸 수 없습니다.
  • <storage_account> = Azure 리소스의 스토리지 계정 이름입니다.

위치 설정 시 추가 참고 사항 및 지침:

  • PDW 엔진은 개체가 생성될 때 외부 데이터 원본이 존재하는지 확인하지 않습니다. 유효성을 검사하려면 외부 데이터 원본을 사용하여 외부 테이블을 만듭니다.
  • 일관된 쿼리 의미 체계를 보장하기 위해 Hadoop을 쿼리할 때 모든 테이블에 대해 동일한 외부 데이터 원본을 사용합니다.
  • wasbs는 데이터가 보안 TLS 연결을 사용하여 전송되므로 권장됩니다.
  • 계층 구조 네임스페이스는 wasb://를 통해 Azure Storage 계정에서 사용하는 경우 지원되지 않습니다.
  • Hadoop Namenode 장애 조치(failover) 중에 PolyBase 쿼리를 성공적으로 수행하려면 Hadoop 클러스터의 Namenode에 대한 가상 IP 주소 사용을 고려하세요. 그렇지 않은 경우 ALTER EXTERNAL DATA SOURCE 명령을 실행하여 새 위치를 가리킵니다.

CREDENTIAL = credential_name

외부 데이터 원본에 대해 인증하기 위한 데이터베이스 범위 자격 증명을 지정합니다.

자격 증명 생성 시 추가 참고 사항 및 지침:

  • Azure Storage에서 Azure Synapse 또는 PDW로 데이터를 로드하려면 Azure Storage 키를 사용합니다.
  • CREDENTIAL은 데이터 보안이 설정된 경우에만 필요합니다. 익명 액세스를 허용하는 데이터 세트에는 CREDENTIAL이 필요하지 않습니다.

TYPE = [ HADOOP ]

구성 중인 외부 데이터 원본의 유형을 지정합니다. 이 매개 변수가 항상 필요한 것은 아닙니다.

  • 외부 데이터 원본이 Cloudera CDH, Hortonworks HDP 또는 Azure Storage이면 HADOOP을 사용합니다.

TYPE = HADOOP을 사용하여 Azure Storage에서 데이터를 로드하는 예제는 Hadoop을 참조하는 외부 데이터 원본 만들기를 참조하세요.

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'

SQL Server 2019 (15.x)에서는 Cloudera CDH, Hortonworks HDP, Azure Storage 계정에 연결하지 않는 한 RESOURCE_MANAGER_LOCATION을 지정하지 마세요.

Cloudera CDH, Hortonworks HDP 또는 Azure Storage 계정에 연결할 때만 이 선택적 값을 구성합니다. 지원되는 Hadoop 버전의 전체 목록은 PolyBase 연결 구성(Transact-SQL)을 참조하세요.

RESOURCE_MANAGER_LOCATION이 정의되면 쿼리 최적화 프로그램은 성능 향상을 위해 비용 기반 결정을 내립니다. MapReduce 작업을 사용하여 Hadoop으로 계산을 푸시 다운할 수 있습니다. RESOURCE_MANAGER_LOCATION을 지정하면 Hadoop과 SQL 간에 전송되는 데이터 양을 크게 줄여 쿼리 성능을 향상시킬 수 있습니다.

리소스 관리자를 지정하지 않은 경우 Hadoop에 대한 푸시 컴퓨팅은 PolyBase 쿼리에 대해 비활성화됩니다. 푸시 다운이 활성화된 Hadoop을 참조하는 외부 데이터 원본 만들기는 구체적인 예제와 추가 지침을 제공합니다.

외부 데이터 원본을 만들 때 RESOURCE_MANAGER_LOCATION 값의 유효성이 검사되지 않습니다. 잘못된 값을 입력하면 제공된 값을 확인할 수 없으므로 푸시 다운을 시도할 때마다 실행 시 쿼리 오류가 발생할 수 있습니다.

PolyBase가 Hadoop 외부 데이터 원본에서 올바르게 작동하려면 다음 Hadoop 클러스터 구성 요소에 대한 포트가 열려 있어야 합니다.

  • HDFS 포트
    • Namenode
    • Datanode
  • 리소스 관리자
    • 작업 제출
    • 작업 기록

포트를 지정하지 않을 경우 기본값은 'hadoop 연결' 구성에 대한 현재 설정을 사용하여 선택됩니다.

Hadoop 연결 기본 Resource Manager 포트
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050

다음 표에서는 이러한 구성 요소의 기본 포트를 보여 줍니다. Hadoop 버전 종속성뿐만 아니라 기본 포트 할당을 사용하지 않는 사용자 지정 구성도 가능합니다.

Hadoop 클러스터 구성 요소 기본 포트
NameNode 8020
DataNode(데이터 전송, 비 권한 IPC 포트) 50010
DataNode(데이터 전송, 권한 IPC 포트) 1019
Resource Manager 작업 제출(Hortonworks 1.3) 50300
Resource Manager 작업 제출(Cloudera 4.3) 8021
Resource Manager 작업 제출(Windows의 Hortonworks 2.0, Linux의 Cloudera 5.x) 8032
Resource Manager 작업 제출(Linux의 Hortonworks 2.x, 3.0, Windows의 Hortonworks 2.1~3) 8050
Resource Manager 작업 기록 10020

사용 권한

PDW(Analytics Platform System)의 데이터베이스에 대한 CONTROL 권한이 필요합니다.

참고

PDW의 이전 릴리스에서는 외부 데이터 원본을 만들려면 ALTER ANY EXTERNAL DATA SOURCE 권한이 필요했습니다.

잠금

EXTERNAL DATA SOURCE 개체에 대한 공유 잠금을 수행합니다.

보안

PolyBase는 대부분의 외부 데이터 원본에 대해 프록시 기반 인증을 지원합니다. 데이터베이스 범위 자격 증명을 생성하여 프록시 계정을 만듭니다.

HADOOP 유형의 SAS 토큰은 지원되지 않습니다. 스토리지 계정 액세스 키를 대신 사용하는 경우에만 BLOB_STORAGE 유형이 지원됩니다. HADOOP 유형 및 SAS 자격 증명으로 외부 데이터 원본을 만들려고 하면 다음 오류로 인해 실패합니다.

Msg 105019, Level 16, State 1 - EXTERNAL TABLE access failed due to internal error: 'Java exception raised on call to HdfsBridge_Connect. Java exception message: Parameters provided to connect to the Azure storage account are not valid.: Error [Parameters provided to connect to the Azure storage account are not valid.] occurred while accessing external file.'

A. Hadoop를 참조하는 외부 데이터 원본 만들기

Hortonworks HDP 또는 Cloudera CDH를 참조하는 외부 데이터 원본을 만들려면 머신 이름 또는 Hadoop Namenode 및 포트의 IP 주소를 지정합니다.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
  ( LOCATION = 'hdfs://10.10.10.10:8050' ,
    TYPE = HADOOP
  ) ;

B. 푸시 다운이 활성화된 상태에서 Hadoop를 참조하는 외부 데이터 원본 만들기

RESOURCE_MANAGER_LOCATION 옵션을 지정하여 PolyBase 쿼리에 대한 Hadoop 계산 푸시 다운을 활성화합니다. 활성화되면 PolyBase는 쿼리 계산을 Hadoop에 푸시해야 하는지 여부를 결정하기 위해 비용 기반 결정을 내립니다.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
  ( LOCATION = 'hdfs://10.10.10.10:8020'
    TYPE = HADOOP
    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
) ;

C. Kerberos 보안 Hadoop를 참조하는 외부 데이터 원본 만들기

Hadoop 클러스터가 Kerberos 보안 방식인지 확인하려면 Hadoop core-site.xml에서 hadoop.security.authentication 속성의 값을 확인합니다. Kerberos 보안 Hadoop 클러스터를 확인하려면 Kerberos 사용자 이름과 암호를 포함한 데이터베이스 범위 자격 증명을 지정해야 합니다. 데이터베이스 범위 자격 증명 비밀을 암호화하는 데에는 데이터베이스 마스터 키가 사용됩니다.

-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;

-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
WITH
  IDENTITY = '<hadoop_user_name>' ,
  SECRET = '<hadoop_password>' ;

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH
  ( LOCATION = 'hdfs://10.10.10.10:8050' ,
    CREDENTIAL = HadoopUser1 ,
    TYPE = HADOOP ,
    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
  ) ;

D. wasb://인터페이스를 사용하여 Azure Storage의 데이터에 액세스하는 외부 데이터 원본 만들기

이 예제에서 외부 데이터 원본은 logs라는 Azure V2 Storage 계정입니다. 스토리지 컨테이너를 daily라고 합니다. Azure Storage 외부 데이터 원본은 데이터 전송 전용입니다. 조건자 푸시 다운을 지원하지 않습니다. 계층 구조 네임스페이스는 wasb:// 인터페이스를 통해 데이터에 액세스하는 경우 지원되지 않습니다. WASB 커넥터를 통해 Azure Storage에 연결할 때는 SAS(공유 액세스 서명)가 아닌 스토리지 계정 키를 사용하여 인증을 수행해야 합니다.

이 예제에서는 Azure Storage에 대한 인증을 위해 데이터베이스 범위 자격 증명을 만드는 방법을 보여 줍니다. 데이터베이스 자격 증명 비밀에 Azure Storage 계정 키를 지정합니다. Azure 스토리지에 대한 인증 중에는 사용되지 않으므로 데이터베이스 범위 지정 자격 증명 ID에 문자열을 지정할 수 있습니다.

-- Create a database master key if one does not already exist, using your own password. This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' ;

-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH
  IDENTITY = '<my_account>' ,
  SECRET = '<azure_storage_account_key>' ;

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH
  ( LOCATION = 'wasbs://daily@logs.blob.core.windows.net/'
    CREDENTIAL = AzureStorageCredential
    TYPE = HADOOP
  ) ;

다음 단계

* SQL Managed Instance *  

개요: Azure SQL Managed Instance

적용 대상:Azure SQL Managed Instance

Azure SQL Managed Instance 외부 데이터 원본을 만듭니다. 자세한 내용은 Azure SQL Managed Instance 사용하여 데이터 가상화를 참조하세요.

Azure SQL Managed Instance 데이터 가상화는 OPENROWSET T-SQL 구문 또는 CREATE EXTERNAL TABLE T-SQL 구문을 통해 다양한 파일 형식의 외부 데이터에 대한 액세스를 제공합니다.

Syntax

구문 표기 규칙에 대한 자세한 내용은 Transact-SQL 구문 표기 규칙을 참조하세요.

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CREDENTIAL = <credential_name> ]
  )
[ ; ]

인수

data_source_name

데이터 원본에 대한 사용자 정의 이름을 지정합니다. 이름은 반드시 데이터베이스 내에서 고유해야 합니다.

LOCATION = '<prefix>://<path[:port]>'

외부 데이터 원본에 대한 연결 프로토콜 및 경로를 제공합니다.

외부 데이터 원본 위치 접두사 위치 경로
Azure Blob Storage abs abs://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>
Azure Data Lake Service Gen2 adls adls://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name>

데이터베이스 엔진은 개체가 생성될 때 외부 데이터 원본이 존재하는지 확인하지 않습니다. 유효성을 검사하려면 외부 데이터 원본을 사용하여 외부 테이블을 만듭니다.

대량 작업을 위해 외부 데이터 원본을 구성할 때 LOCATION URL 끝에 추적 / , 파일 이름 또는 공유 액세스 서명 매개 변수를 추가하지 마세요.

CREDENTIAL = credential_name

외부 데이터 원본에 대해 인증하기 위한 데이터베이스 범위 자격 증명을 지정합니다.

자격 증명 생성 시 추가 참고 사항 및 지침:

  • Azure Storage에서 Azure SQL Managed Instance로 데이터를 로드하려면 SAS 토큰(공유 액세스 서명)을 사용합니다.
  • CREDENTIAL은 데이터 보안이 설정된 경우에만 필요합니다. 익명 액세스를 허용하는 데이터 세트에는 CREDENTIAL이 필요하지 않습니다.
  • 자격 증명이 필요한 경우 또는 SHARED ACCESS SIGNATURE 를 IDENTITY로 사용하여 Managed Identity 자격 증명을 만들어야 합니다. 데이터베이스 범위 지정 자격 증명을 만들려면 CREATE DATABASE SCOPED CREDENTIAL(Transact-SQL)을 참조하세요.
  • TYPE = BLOB_STORAGE는 대량 작업에만 사용할 수 있습니다. TYPE = BLOB_STORAGE를 사용하여 외부 데이터 원본에 대한 외부 테이블을 만들 수 없습니다.

데이터베이스 범위 자격 증명에 관리 서비스 ID를 사용하려면 다음을 수행합니다.

  • WITH IDENTITY = 'Managed Identity' 지정

    • 이 용도로 사용하려면 사용하도록 설정해야 하는 Azure SQL Managed Instance 시스템 할당 관리 서비스 ID를 사용합니다.
  • 필요한 Azure Blob Storage 컨테이너에 Azure SQL Managed Instance 시스템 할당 관리 서비스 ID에 읽기 권한자 Azure RBAC 역할을 부여합니다. 예를 들어 Azure Portal 통해 Azure Portal 사용하여 Azure 역할 할당을 참조하세요.

데이터베이스 범위 자격 증명에 대한 SAS(공유 액세스 서명)를 만들려면 다음을 수행합니다.

  • WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = ... 지정

  • 공유 액세스 서명을 만드는 방법에는 여러 가지가 있습니다.

  • SAS 토큰은 다음과 같이 구성해야 합니다.

    • SAS 토큰이 생성되면 토큰의 시작 부분에 물음표('?')가 포함됩니다. SECRET으로 구성된 경우 선행 ? 을 제외합니다.
    • 유효한 만료 기간을 사용합니다(모든 날짜는 UTC 시간임).
    • 로드해야 하는 파일에 대해 최소한 읽기 권한을 부여합니다(예: srt=o&sp=r). 다양한 사용 사례에 대해 여러 공유 액세스 서명을 만들 수 있습니다. 권한은 다음과 같이 부여되어야 합니다.
    작업 사용 권한
    파일에서 데이터 읽기 읽기
    여러 파일 및 하위 폴더에서 데이터를 읽습니다. 읽기 및 나열
    외부 테이블 만들기를 선택으로 사용(CETAS) 읽기, 만들기 및 쓰기

사용 권한

Azure SQL Managed Instance의 데이터베이스에 대한 CONTROL 권한이 필요합니다.

잠금

EXTERNAL DATA SOURCE 개체에 대한 공유 잠금을 수행합니다.

예제

자세한 예제는 Azure SQL Managed Instance 사용하여 데이터 가상화를 참조하세요.

A. OPENROWSET 또는 외부 테이블을 사용하여 Azure SQL Managed Instance 외부 데이터 쿼리

자세한 예제는 외부 데이터 원본 만들기를 참조하거나 Azure SQL Managed Instance 사용하여 데이터 가상화를 참조하세요.

  1. 데이터베이스 마스터 키가 없는 경우 만듭니다.

    -- Optional: Create MASTER KEY if it doesn't exist in the database:
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong Password>'
    GO
    
  2. SAS 토큰을 사용하여 데이터베이스 범위 자격 증명을 만듭니다. 관리 ID를 사용할 수도 있습니다.

    CREATE DATABASE SCOPED CREDENTIAL MyCredential
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    SECRET = '<KEY>' ; --Removing leading '?'
    GO
    
  3. 자격 증명을 사용하여 외부 데이터 원본을 만듭니다.

    --Create external data source pointing to the file path, and referencing database-scoped credential:
    CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource
    WITH (
        LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest'
            CREDENTIAL = [MyCredential]
    )
    GO
    
  4. 스키마 유추를 사용하여 스키마를 모르고 데이터를 빠르게 탐색하는 OPENROWSET T-SQL 구문을 사용하여 외부 데이터 원본의 parquet 데이터 파일을 쿼리합니다.

    --Query data with OPENROWSET, relying on schema inference.
    SELECT TOP 10 *
    FROM OPENROWSET(
     BULK 'bing_covid-19_data.parquet',
     DATA_SOURCE = 'MyExternalDataSource',
     FORMAT = 'parquet'
    ) AS filerows
    
  5. 또는 실행 비용을 쿼리할 수 있는 스키마 유추에 의존하는 대신 OPENROWSET WITH 절을 사용하여 데이터를 쿼리합니다. CSV에서는 스키마 유추가 지원되지 않습니다.

    --Or, query data using the WITH clause on a CSV, where schema inference is not supported
    SELECT TOP 10 id, updated, confirmed, confirmed_change
    FROM OPENROWSET(
     BULK 'bing_covid-19_data.csv',
     DATA_SOURCE = 'MyExternalDataSource',
     FORMAT = 'CSV',
     FIRSTROW = 2
    )
    WITH (
     id int,
     updated date,
     confirmed int,
     confirmed_change int
    ) AS filerows
    
  6. 또는 외부 파일 형식 및 EXTERNAL TABLE을 만들어 마치 로컬 테이블인 것처럼 데이터를 쿼리합니다.

    -- Or, create an EXTERNAL FILE FORMAT and an EXTERNAL TABLE
    
    --Create external file format
    CREATE EXTERNAL FILE FORMAT DemoFileFormat
    WITH (
     FORMAT_TYPE=PARQUET
    )
    GO
    
    --Create external table:
    CREATE EXTERNAL TABLE tbl_TaxiRides(
     vendorID VARCHAR(100) COLLATE Latin1_General_BIN2,
     tpepPickupDateTime DATETIME2,
     tpepDropoffDateTime DATETIME2,
     passengerCount INT,
     tripDistance FLOAT,
     puLocationId VARCHAR(8000),
     doLocationId VARCHAR(8000),
     startLon FLOAT,
     startLat FLOAT,
     endLon FLOAT,
     endLat FLOAT,
     rateCodeId SMALLINT,
     storeAndFwdFlag VARCHAR(8000),
     paymentType VARCHAR(8000),
     fareAmount FLOAT,
     extra FLOAT,
     mtaTax FLOAT,
     improvementSurcharge VARCHAR(8000),
     tipAmount FLOAT,
     tollsAmount FLOAT,
     totalAmount FLOAT
    )
    WITH (
     LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet',
     DATA_SOURCE = NYCTaxiExternalDataSource,
     FILE_FORMAT = MyFileFormat\.\./\.\./\.\./azure-sql/
    );
    GO
    
    --Then, query the data via an external table with T-SQL:
    SELECT TOP 10 *
    FROM tbl_TaxiRides;
    GO
    

다음 단계