CREATE EXTERNAL DATA SOURCE(Transact-SQL)CREATE EXTERNAL DATA SOURCE (Transact-SQL)

적용 대상: 예SQL Server(2016부터) 예Azure SQL Database 예Azure SQL Data Warehouse 예병렬 데이터 웨어하우스 APPLIES TO: yesSQL Server (starting with 2016) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

PolyBase 또는 Elastic Database 쿼리에 대한 외부 데이터 원본을 만듭니다.Creates an external data source for PolyBase, or Elastic Database queries. 시나리오에 따라 구문은 크게 다릅니다.Depending on the scenario, the syntax differs significantly. PolyBase용으로 만든 외부 데이터 원본은 Elastic Database 쿼리에 사용할 수 없습니다.An external data source created for PolyBase cannot be used for Elastic Database queries. 마찬가지로 Elastic Database 쿼리용으로 만든 외부 데이터 원본은 PolyBase 등에 사용할 수 없습니다.Similarly, an external data source created for Elastic Database queries cannot be used for PolyBase, etc.

참고

PolyBase는 SQL Server 2016(또는 그 이상), Azure SQL Data Warehouse 및 병렬 데이터 웨어하우스에서만 지원됩니다.PolyBase is supported only on SQL Server 2016 (or higher), Azure SQL Data Warehouse, and Parallel Data Warehouse. Elastic Database 쿼리는 Azure SQL Database v12 이상에서만 지원됩니다.Elastic Database queries are supported only on Azure SQL Database v12 or later.

PolyBase 시나리오의 경우 외부 데이터 원본은 Azure Storage blob 컨테이너인 HDFS(Hadoop 파일 시스템) 또는 Azure Data Lake Store입니다.For PolyBase scenarios, the external data source is either a Hadoop File System (HDFS), an Azure storage blob container, or Azure Data Lake Store. 자세한 내용은 PolyBase 시작을 참조하세요.For more information, see Get started with PolyBase.

Elastic Database 쿼리 시나리오의 경우 외부 원본은 분할된 데이터베이스 맵 관리자(Azure SQL Database의) 또는 원격 데이터베이스(Azure SQL Database의)입니다.For Elastic Database query scenarios, the external source is either a shard map manager (on Azure SQL Database), or a remote database (on Azure SQL Database). 외부 데이터 원본을 만든 후 sp_execute_remote (Azure SQL Database)를 사용합니다.Use sp_execute_remote (Azure SQL Database) after creating an external data source. 자세한 내용은 참조 Elastic Database 쿼리를 참조하세요.For more information, see Elastic Database query.

Azure Blob Storage 외부 데이터 원본은 BULK INSERTOPENROWSET 구문을 지원하며, Azure Blob Storage for PolyBase와는 다릅니다.The Azure Blob storage external data source supports BULK INSERT and OPENROWSET syntax, and is different than Azure Blob storage for PolyBase.

항목 링크 아이콘 Transact-SQL 구문 규칙Topic link icon Transact-SQL Syntax Conventions

구문Syntax

-- PolyBase only:  Hadoop cluster as data source   
-- (on SQL Server 2016)  
CREATE EXTERNAL DATA SOURCE data_source_name  
    WITH (   
        TYPE = HADOOP,
        LOCATION = 'hdfs://NameNode_URI[:port]'  
        [, RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]' ]  
        [, CREDENTIAL = credential_name ]
    )
[;]  

-- PolyBase only: Azure Storage Blob as data source   
-- (on SQL Server 2016)  
CREATE EXTERNAL DATA SOURCE data_source_name  
    WITH (   
        TYPE = BLOB_STORAGE,  
        LOCATION = 'wasb[s]://container@account_name.blob.core.windows.net'
        [, CREDENTIAL = credential_name ]
    )  
[;]

-- PolyBase only: Azure Data Lake Store
-- (on Azure SQL Data Warehouse)
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH (
    TYPE = HADOOP,
    LOCATION = 'adl://<AzureDataLake account_name>.azuredatalake.net',
    CREDENTIAL = AzureStorageCredential
);

-- PolyBase only: Hadoop cluster as data source
-- (on Parallel Data Warehouse)
CREATE EXTERNAL DATA SOURCE data_source_name
    WITH ( 
        TYPE = HADOOP, 
        LOCATION = 'hdfs://NameNode_URI[:port]'
        [, JOB_TRACKER_LOCATION = 'JobTracker_URI[:port]' ]
    )
[;]

-- PolyBase only: Azure Storage Blob as data source 
-- (on Parallel Data Warehouse)
CREATE EXTERNAL DATA SOURCE data_source_name
    WITH ( 
        TYPE = BLOB_STORAGE,
        LOCATION = 'wasb[s]://container@account_name.blob.core.windows.net'
    )
[;]

-- Elastic Database query only: a shard map manager as data source   
-- (only on Azure SQL Database)  
CREATE EXTERNAL DATA SOURCE data_source_name  
    WITH (   
        TYPE = SHARD_MAP_MANAGER,  
        LOCATION = '<server_name>.database.windows.net',  
        DATABASE_NAME = '\<ElasticDatabase_ShardMapManagerDb'>,  
        CREDENTIAL = <ElasticDBQueryCred>,  
        SHARD_MAP_NAME = '<ShardMapName>'  
    )  
[;]  

-- Elastic Database query only: a remote database on Azure SQL Database as data source   
-- (only on Azure SQL Database)  
CREATE EXTERNAL DATA SOURCE data_source_name  
    WITH (   
        TYPE = RDBMS,  
        LOCATION = '<server_name>.database.windows.net',  
        DATABASE_NAME = '<Remote_Database_Name>',  
        CREDENTIAL = <SQL_Credential>  
    )  
[;]  

-- Bulk operations only: Azure Storage Blob as data source   
-- (on SQL Server 2017 or later, and Azure SQL Database).
CREATE EXTERNAL DATA SOURCE data_source_name  
    WITH (   
        TYPE = BLOB_STORAGE,  
        LOCATION = 'https://storage_account_name.blob.core.windows.net/container_name'
        [, CREDENTIAL = credential_name ]
    )  

인수Arguments

data_source_name은 데이터 원본에 대한 사용자 정의 이름을 지정합니다.data_source_name Specifies the user-defined name for the data source. 이름은 SQL Server, Azure SQL Database 및 Azure SQL Data Warehouse 내에서 고유해야 합니다.The name must be unique within the database in SQL Server, Azure SQL Database, and Azure SQL Data Warehouse. 또한 이름은 병렬 데이터 웨어하우스의 서버 내에서 고유해야 합니다.The name must be unique within the server in Parallel Data Warehouse.

TYPE = [ HADOOP | SHARD_MAP_MANAGER | RDBMS | BLOB_STORAGE]TYPE = [ HADOOP | SHARD_MAP_MANAGER | RDBMS | BLOB_STORAGE]
데이터 원본 유형을 지정합니다.Specifies the data source type. 외부 데이터 원본이 Hadoop 또는 Azure Storage Blob for Hadoop인 경우 HADOOP 을 사용합니다.Use HADOOP when the external data source is Hadoop or Azure Storage blob for Hadoop. Azure SQL Database에서 분할하기 위해 Elastic Database 쿼리에 대한 외부 데이터 원본을 만드는 경우 SHARD_MAP_MANAGER를 사용합니다.Use SHARD_MAP_MANAGER when creating an external data source for Elastic Database query for sharding on Azure SQL Database. Azure SQL Database에 대한 Elastic Database 쿼리를 사용하는 데이터베이스 간 쿼리의 경우 외부 데이터 원본과 함께 RDBMS를 사용합니다.Use RDBMS with external data sources for cross-database queries with Elastic Database query on Azure SQL Database. SQL Server 2017(14.x)SQL Server 2017 (14.x)와 함께 BULK INSERT 또는 OPENROWSET을 사용하여 대량 작업을 수행하는 경우 BLOB_STORAGE를 사용합니다.Use BLOB_STORAGE when performing bulk operations using BULK INSERT or OPENROWSET with SQL Server 2017(14.x)SQL Server 2017 (14.x).

LOCATION = <location_path> HADOOP LOCATION = <location_path> HADOOP
HADOOP의 경우 Hadoop 클러스터에 대해 URI(Uniform Resource Indicator)를 지정합니다.For HADOOP, specifies the Uniform Resource Indicator (URI) for a Hadoop cluster.
LOCATION = 'hdfs:\/\/*NameNode\_URI*\[:*port*\]'
NameNode_URI: Hadoop 클러스터 Namenode의 컴퓨터 이름 또는 IP 주소입니다.NameNode_URI: The machine name or IP address of the Hadoop cluster Namenode.
포트: Namenode IPC 포트이며port: The Namenode IPC port. Hadoop의 fs.default.name 구성 매개 변수에 의해 표시됩니다.This is indicated by the fs.default.name configuration parameter in Hadoop. 값을 지정하지 않으면 기본적으로 8020이 사용됩니다.If the value is not specified, 8020 will be used by default.
예: LOCATION = 'hdfs://10.10.10.10:8020'Example: LOCATION = 'hdfs://10.10.10.10:8020'

Hadoop을 포함한 Azure Blob Storage의 경우 Azure Blob Storage에 연결하기 위한 URI를 지정합니다.For Azure blob storage with Hadoop, specifies the URI for connecting to Azure blob storage.
LOCATION = 'wasb[s]://container@account_name.blob.core.windows.net'
wasb [s]: Azure Blob Storage에 대한 프로토콜을 지정합니다.wasb[s]: Specifies the protocol for Azure blob storage. [s]는 선택 사항이며 보안 SSL 연결을 지정합니다. SQL Server에서 보낸 데이터는 SSL 프로토콜을 통해 안전하게 암호화됩니다.The [s] is optional and specifies a secure SSL connection; data sent from SQL Server is securely encrypted through the SSL protocol. 'wasb' 대신 'wasbs'를 사용할 것을 적극 권장합니다.We strongly recommend using 'wasbs' instead of 'wasb'. 참고로 위치에 wasb[s] 대신에 asv[s]를 사용할 수 있습니다.Note that the location can use asv[s] instead of wasb[s]. asv[s] 구문은 더 이상 사용되지 않으며 후속 릴리스에서 제거될 예정입니다.The asv[s] syntax is deprecated and will be removed in a future release.
container: Azure Blob Storage 컨테이너의 이름을 지정합니다.container: Specifies the name of the Azure blob storage container. 도메인의 저장소 계정의 루트 컨테이너를 지정하려면 컨테이너 이름 대신에 도메인 이름을 사용합니다.To specify the root container of a domain’s storage account, use the domain name instead of the container name. 루트 컨테이너는 읽기 전용이므로 데이터를 컨테이너에 다시 쓸 수 없습니다.Root containers are read-only, so data cannot be written back to the container.
account_name: Azure Storage 계정의 정규화된 도메인 이름(FQDN)입니다.account_name: The fully qualified domain name (FQDN) of the Azure storage account.
예: LOCATION = 'wasbs://dailylogs@myaccount.blob.core.windows.net/'Example: LOCATION = 'wasbs://dailylogs@myaccount.blob.core.windows.net/'

Azure Data Lake Store의 경우 위치는 Azure Data Lake Store에 연결하기 위한 URI를 지정합니다.For Azure Data Lake Store, location specifies the URI for connecting to your Azure Data Lake Store.

SHARD_MAP_MANAGER SHARD_MAP_MANAGER
SHARD_MAP_MANAGER의 경우 Azure 가상 머신의 Azure SQL Database 또는 SQL Server Database에서 분할된 데이터베이스 맵 관리자를 호스팅하는 논리 서버 이름을 지정합니다.For SHARD_MAP_MANAGER, specifies the logical server name that hosts the shard map manager in Azure SQL Database or a SQL Server database on an Azure virtual machine.

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'
) ;

단계별 자습서는 분할을 위한 탄력적 쿼리 시작(수평 분할)을 참조하세요.For a step-by-step tutorial, see Getting started with elastic queries for sharding (horizontal partitioning).

RDBMS RDBMS
RDBMS의 경우 Azure SQL Database에 있는 원격 데이터베이스의 논리 서버 이름을 지정합니다.For RDBMS, specifies the logical server name of the remote database in Azure 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에 대한 단계별 자습서는 데이터베이스 간 쿼리 시작(수직 분할)을 참조하세요.For a step-by-step tutorial on RDBMS, see Getting started with cross-database queries (vertical partitioning).

BLOB_STORAGE BLOB_STORAGE
대량 작업의 경우에만 LOCATION은 Azure Blob Storage 및 컨테이너에 유효한 URL이어야 합니다.For bulk operations only, LOCATION must be valid the URL to Azure Blob storage and container. LOCATION URL 끝에 /, 파일 이름 또는 공유 액세스 서명 매개 변수를 두지 마십시오.Do not put /, file name, or shared access signature parameters at the end of the LOCATION URL.
사용되는 자격 증명은 SHARED ACCESS SIGNATURE을 ID로 사용하여 만들어져야 합니다.The credential used, must be created using SHARED ACCESS SIGNATURE as the identity. 공유 액세스 서명에 대한 자세한 내용은 SAS(공유 액세스 서명) 사용을 참조하세요.For more information on shared access signatures, see Using Shared Access Signatures (SAS). Blob 저장소에 액세스하는 예는 BULK INSERT의 예제 F를 참조하세요.For an example of accessing blob storage, see example F of BULK INSERT.

참고

Azure Blob Storage에서 SQL DW 또는 병렬 데이터 웨어하우스로 로드하려면 Azure Storage Key가 암호여야 합니다.To load from Azure Blob storage into SQL DW or Parallel Data Warehouse, the Secret must be the Azure Storage Key.

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'
Hadoop 리소스 관리자 위치를 지정합니다.Specifies the Hadoop resource manager location. 지정된 경우 쿼리 최적화 프로그램은 MapReduce와 함께 Hadoop의 계산 기능을 사용하여 PolyBase 쿼리의 데이터를 사전 처리하기 위해 비용 기반 결정을 내릴 수 있습니다.When specified, the query optimizer can make a cost-based decision to pre-process data for a PolyBase query by using Hadoop’s computation capabilities with MapReduce. 조건자 푸시 다운이라는 이 기능은 Hadoop과 SQL 간에 전송되는 데이터 양을 크게 줄여 쿼리 성능을 향상시킬 수 있습니다.Called predicate pushdown, this can significantly reduce the volume of data transferred between Hadoop and SQL, and therefore improve query performance.

이 기능을 지정하지 않으면 Hadoop에 대한 푸시 계산은 PolyBase 쿼리에 대해 비활성화됩니다.When this is not specified, pushing compute to Hadoop is disabled for PolyBase queries.

포트를 지정하지 않을 경우 기본값은 ‘hadoop 연결’ 구성에 대한 현재 설정을 사용하여 결정됩니다.If the port is not specified, the default value is determined using the current setting for ‘hadoop connectivity’ configuration.

Hadoop 연결Hadoop Connectivity 기본 Resource Manager 포트Default Resource Manager Port
11 5030050300
22 5030050300
33 80218021
44 80328032
55 80508050
66 80328032
77 80508050

각 연결에서 지원되는 Hadoop 배포 및 버전의 전체 목록은 PolyBase 연결 구성(Transact-SQL)을 참조하세요.For a complete list of Hadoop distributions and versions supported by each connectivity value, see PolyBase Connectivity Configuration (Transact-SQL).

중요

RESOURCE_MANAGER_LOCATION 값은 문자열이며 외부 데이터 원본을 만드는 경우 유효성이 검사되지 않습니다.The RESOURCE_MANAGER_LOCATION value is a string and is not validated when you create the external data source. 잘못된 값을 입력하면 이후 위치에 액세스할 때 지연이 발생할 수 있습니다.Entering an incorrect value can cause future delays when accessing the location.

Hadoop 예제:Hadoop examples:

  • Hortonworks HDP 2.0, 2.1, 2.2.Hortonworks HDP 2.0, 2.1, 2.2. Windows용 2.3:2.3 on Windows:

    RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI:8032'  
    
  • Windows용 Hortonworks HDP 1.3:Hortonworks HDP 1.3 on Windows:

    RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI:50300'  
    
  • Linux용 Hortonworks HDP 2.0, 2.1, 2.2, 2.3:Hortonworks HDP 2.0, 2.1, 2.2, 2.3 on Linux:

    RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI:8050'  
    
  • Linux용 Hortonworks HDP 1.3:Hortonworks HDP 1.3 on Linux:

    RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI:50300'  
    
  • Linux용 Cloudera 4.3:Cloudera 4.3 on Linux:

    RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI:8021'  
    
  • Linux용 Cloudera 5.1 - 5.11:Cloudera 5.1 - 5.11 on Linux:

    RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI:8032'  
    

    CREDENTIAL = credential_nameCREDENTIAL = credential_name
    외부 데이터 원본에 대해 인증하기 위한 데이터베이스 범위 자격 증명을 지정합니다.Specifies a database-scoped credential for authenticating to the external data source. 예를 들어 C. Azure Blob Storage 외부 데이터 원본 만들기를 참조하세요.For an example, see C. Create an Azure blob storage external data source. 자격 증명을 만드는 방법은 CREATE CREDENTIAL(Transact-SQL)을 참조하세요.To create a credential, see CREATE CREDENTIAL (Transact-SQL). 참고로 CREDENTIAL은 익명 액세스를 허용하는 공용 데이터 집합의 경우 필요하지 않습니다.Note that CREDENTIAL is not required for public data sets that allow anonymous access.

    DATABASE_NAME = 'QueryDatabaseName'DATABASE_NAME = 'QueryDatabaseName'
    분할된 데이터베이스 맵 관리자(SHARD_MAP_MANAGER의 경우) 또는 원격 데이터베이스(RDBMS의 경우)로 작동하는 데이터베이스의 이름입니다.The name of the database that functions as the shard map manager (for SHARD_MAP_MANAGER) or the remote database (for RDBMS).

    SHARD_MAP_NAME = 'ShardMapName'SHARD_MAP_NAME = 'ShardMapName'
    SHARD_MAP_MANAGER의 경우만.For SHARD_MAP_MANAGER only. 분할된 데이터베이스 맵의 이름입니다.The name of the shard map. 분할된 데이터베이스 맵 만들기에 대한 자세한 내용은 Elastic Database 쿼리 시작 참조For more information about creating a shard map, see Getting started with Elastic Database query

PolyBase 관련 메모PolyBase-specific notes

지원되는 외부 데이터 원본의 전체 목록은 PolyBase 연결 구성(Transact-SQL)을 참조하세요.For a complete list of supported external data sources, see PolyBase Connectivity Configuration (Transact-SQL).

PolyBase를 사용하려면 다음 세 개체를 만들어야 합니다.To use PolyBase, you need to create these three objects:

  • 외부 데이터 원본.An external data source.

  • 외부 파일 형식, 그리고An external file format, and

  • 외부 데이터 원본과 외부 파일 형식을 참조하는 외부 테이블.An external table that references the external data source and external file format.

PermissionsPermissions

SQL DW, SQL Server, APS 2016 및 SQL DB의 데이터베이스에 대한 CONTROL 권한이 필요합니다.Requires CONTROL permission on database in SQL DW, SQL Server, APS 2016, and SQL DB.

중요

PDW의 이전 릴리스에서는 외부 데이터 원본을 만들려면 ALTER ANY EXTERNAL DATA SOURCE 권한이 필요했습니다.In previous releases of PDW, create external data source required ALTER ANY EXTERNAL DATA SOURCE permissions.

오류 처리Error Handling

런타임 오류는 외부 Hadoop 데이터 원본이 정의된 RESOURCE_MANAGER_LOCATION에 관하여 일관성이 없는 경우 발생합니다.A runtime error will occur if the external Hadoop data sources are inconsistent about having RESOURCE_MANAGER_LOCATION defined. 즉, 같은 Hadoop 클러스터를 참조하는 외부 데이터 원본 두 개를 지정한 다음, 하나에는 리소스 관리자 위치를 제공하고 다른 하나에는 제공하지 않는 식으로 할 수 없습니다.That is, you cannot specify two external data sources that reference the same Hadoop cluster and then providing resource manager location for one and not for the other.

SQL 엔진은 외부 데이터 원본 개체를 만들 때 해당 외부 데이터 원본이 존재하는지 확인하지 않습니다.The SQL engine does not verify the existence of the external data source when it creates the external data source object. 쿼리를 실행하는 동안 데이터 원본이 존재하지 않으면 오류가 발생합니다.If the data source does not exist during query execution, an error will occur.

일반적인 주의 사항General Remarks

PolyBase의 경우 외부 데이터 원본은 SQL Server 및 SQL Data Warehouse에 범위가 지정된 데이터베이스입니다.For PolyBase, the external data source is database-scoped in SQL Server and SQL Data Warehouse. 이는 병렬 데이터 웨어하우스에 범위 지정된 서버입니다.It is server-scoped in Parallel Data Warehouse.

PolyBase의 경우 RESOURCE_MANAGER_LOCATION 또는 JOB_TRACKER_LOCATION을 정의하면 쿼리 최적화 프로그램은 외부 Hadoop 원본에 대해 맵 감소 작업을 시작하고 계산을 푸시 다운하여 각 쿼리의 최적화를 고려합니다.For PolyBase, when RESOURCE_MANAGER_LOCATION or JOB_TRACKER_LOCATION is defined, the query optimizer will consider optimizing each query by initiating a map reduce job on the external Hadoop source and pushing down computation. 이것은 전적으로 비용 기반의 결정입니다.This is entirely a cost-based decision.

Hadoop NameNode 장애 조치(Failover) 시 성공적인 PolyBase를 보장하려면 Hadoop 클러스터의 NameNode에 가상 IP 주소 사용을 고려하세요.To ensure successful PolyBase queries in the event of Hadoop NameNode failover, consider using a virtual IP address for the NameNode of the Hadoop cluster. Hadoop NameNode에 가상 IP 주소를 사용하지 않으면 Hadoop NameNode 장애 조치 시 ALTER EXTERNAL DATA SOURCE 개체가 새 위치를 가리키게 해야 합니다.If you do not use a virtual IP address for the Hadoop NameNode, in the event of a Hadoop NameNode failover you will have to ALTER EXTERNAL DATA SOURCE object to point to the new location.

제한 사항Limitations and Restrictions

같은 Hadoop 클러스터 위치에 정의된 모든 데이터 원본은 RESOURCE_MANAGER_LOCATION 또는 JOB_TRACKER_LOCATION에 대해 같은 설정을 사용해야 합니다.All data sources defined on the same Hadoop cluster location must use the same setting for RESOURCE_MANAGER_LOCATION or JOB_TRACKER_LOCATION. 일관되지 않은 부분이 있으면 런타임 오류가 발생합니다.If there is inconsistency, a runtime error will occur.

Hadoop 클러스터가 이름을 사용하여 설정되었는데 외부 데이터 원본이 클러스터 위치에 대해 IP 주소를 사용하는 경우, PolyBase는 데이터 원본이 사용될 때 클러스터 이름을 여전히 확인할 수 있어야 합니다.If the Hadoop cluster is set up with a name and the external data source uses the IP address for the cluster location, PolyBase must still be able to resolve the cluster name when the data source is used. 이름을 확인하려면 DNS 전달자를 활성화해야 합니다.To resolve the name, you must enable a DNS forwarder.

잠금Locking

EXTERNAL DATA SOURCE 개체에 대해 공유 잠금을 적용합니다.Takes a shared lock on the EXTERNAL DATA SOURCE object.

예제: SQL Server 2016Examples: SQL Server 2016

1.A. Hadoop를 참조하는 외부 데이터 원본 만들기Create external data source to reference Hadoop

Hortonworks 또는 Cloudera Hadoop 클러스터를 참조하는 외부 데이터 원본을 만들려면 컴퓨터 이름 또는 Hadoop Namenode 및 포트의 IP 주소를 지정합니다.To create an external data source to reference your Hortonworks or Cloudera Hadoop cluster, specify the machine name or IP address of the Hadoop Namenode and port.

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

2.B. 푸시 다운이 활성화된 상태에서 Hadoop를 참조하는 외부 데이터 원본 만들기Create external data source to reference Hadoop with pushdown enabled

RESOURCE_MANAGER_LOCATION 옵션을 지정하여 PolyBase 쿼리에 대한 Hadoop 계산 푸시 다운을 활성화합니다.Specify the RESOURCE_MANAGER_LOCATION option to enable push-down computation to Hadoop for PolyBase queries. 활성화되면 PolyBase는 비용 기반 결정을 사용하여 Hadoop에 대해 쿼리 계산을 푸시해야 하는지 아니면 SQL Server를 처리하기 위해 모든 데이터를 이동해야 하는지 결정합니다.Once enabled, PolyBase uses a cost-based decision to determine whether the query computation should be pushed to Hadoop or all the data should be moved to process the query in SQL Server.

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

3.C. Kerberos 보안 Hadoop를 참조하는 외부 데이터 원본 만들기Create external data source to reference Kerberos-secured Hadoop

Hadoop 클러스터가 Kerberos 보안 방식인지 확인하려면 Hadoop core-site.xml에서 hadoop.security.authentication 속성의 값을 확인합니다.To verify if the Hadoop cluster is Kerberos-secured, check the value of hadoop.security.authentication property in Hadoop core-site.xml. Kerberos 보안 Hadoop 클러스터를 확인하려면 Kerberos 사용자 이름과 암호를 포함한 데이터베이스 범위 자격 증명을 지정해야 합니다.To reference a Kerberos-secured Hadoop cluster, you must specify a database scoped credential that contains your Kerberos username and password. 데이터베이스 범위 자격 증명 비밀을 암호화하는 데에는 데이터베이스 마스터 키가 사용됩니다.The database master key is used to encrypt the database scoped credential secret.

-- 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 = 'S0me!nfo';

-- 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 (
    TYPE = HADOOP, 
    LOCATION = 'hdfs://10.10.10.10:8050', 
    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050', 
    CREDENTIAL = HadoopUser1
);

4.D. Azure Blob Storage를 참조하는 외부 데이터 원본 만들기Create external data source to reference Azure blob storage

Azure Blob Storage 컨테이너를 참조하는 외부 데이터 원본을 만들려면 Azure Blob Storage URI 및 Azure Storage 계정 키를 포함한 데이터베이스 범위 자격 증명을 지정합니다.To create an external data source to reference your Azure blob storage container, specify the Azure blob storage URI and a database scoped credential that contains your Azure storage account key.

이 예제에서 외부 데이터 원본은 myaccount라는 Azure Storage 계정 아래의 dailylogs라는 Azure Blob Storage 컨테이너입니다.In this example, the external data source is an Azure blob storage container called dailylogs under Azure storage account named myaccount. Azure Storage 외부 데이터 원본은 데이터 전송만을 위한 것이며 조건자 푸시 다운을 지원하지 않습니다.The Azure storage external data source is for data transfer only; and it does not support predicate pushdown.

이 예제에서는 Azure Storage에 대한 인증을 위해 데이터베이스 범위 자격 증명을 만드는 방법을 보여 줍니다.This example shows how to create the database scoped credential for authentication to Azure storage. 데이터베이스 자격 증명 비밀에 Azure Storage 계정 키를 지정합니다.Specify the Azure storage account key in the database credential secret. 데이터베이스 범위 자격 증명 ID의 문자열을 지정하며, 이 문자열은 Azure Storage에 대한 인증을 위해 사용되지 않습니다.Specify any string in database scoped credential identity, it is not used for authentication to Azure storage. 그런 다음, 외부 데이터 원본을 만드는 문에 자격 증명이 사용됩니다.Then, the credential is used in the statement that creates an external data source.

-- 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 = 'S0me!nfo';

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

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

예제: Azure SQL DatabaseExamples: Azure SQL Database

5.E. 분할된 데이터베이스 맵 관리자 외부 데이터 원본 만들기Create a Shard map manager external data source

SHARD_MAP_MANAGER를 참조하는 외부 데이터 원본을 만들려면 Azure 가상 머신의 Azure SQL Database 또는 SQL Server Database에서 분할된 데이터베이스 맵 관리자를 호스팅하는 논리 서버 이름을 지정합니다.To create an external data source to reference a SHARD_MAP_MANAGER, specify the logical server name that hosts the shard map manager in Azure SQL Database or a SQL Server database on an Azure virtual machine.

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'
);

6.F. RDBMS 외부 데이터 원본 만들기Create an RDBMS external data source

RDBMS를 참조하는 외부 데이터 원본을 만들려면 Azure SQL Database에 있는 원격 데이터베이스의 논리 서버 이름을 지정합니다.To create an external data source to reference a RDBMS, specifies the logical server name of the remote database in Azure 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 
);

예제: Azure SQL Data WarehouseExamples: Azure SQL Data Warehouse

7.G. Azure Data Lake Store를 참조하는 외부 데이터 원본 만들기Create external data source to reference Azure Data Lake Store

Azure Data Lake Store 연결은 ADLS URI 및 Azure Acitve directory 응용 프로그램의 서비스 원칙을 기반으로 합니다.Azure Data lake Store connectivity is based on your ADLS URI and your Azure Acitve directory Application's service principle. 이 응용 프로그램을 만들기 위한 문서는 Active Directory를 사용하여 Data Lake 저장소 인증에서 찾을 수 있습니다.Documentation for creating this application can be found atData lake store authentication using Active Directory.

-- If you do not have a Master Key on your DW you will need to create one.
CREATE MASTER KEY

-- These values come from your Azure Active Directory Application used to authenticate to ADLS
CREATE DATABASE SCOPED CREDENTIAL ADLUser 
WITH IDENTITY = '<clientID>@<OAuth2.0TokenEndPoint>',
SECRET = '<KEY>' ;


CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH (TYPE = HADOOP,
      LOCATION = '<ADLS URI>'
)

예제: 병렬 데이터 웨어하우스Examples: Parallel Data Warehouse

8.H. 푸시 다운이 활성화된 상태에서 Hadoop를 참조하는 외부 데이터 원본 만들기Create external data source to reference Hadoop with pushdown enabled

JOB_TRACKER_LOCATION 옵션을 지정하여 PolyBase 쿼리에 대한 Hadoop 계산 푸시 다운을 활성화합니다.Specify the JOB_TRACKER_LOCATION option to enable push-down computation to Hadoop for PolyBase queries. 활성화되면 PolyBase는 비용 기반 결정을 사용하여 Hadoop에 대해 쿼리 계산을 푸시해야 하는지 아니면 SQL Server를 처리하기 위해 모든 데이터를 이동해야 하는지 결정합니다.Once enabled, PolyBase uses a cost-based decision to determine whether the query computation should be pushed to Hadoop or all the data should be moved to process the query in SQL Server.

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

9.I. Azure Blob Storage를 참조하는 외부 데이터 원본 만들기Create external data source to reference Azure blob storage

Azure Blob Storage 컨테이너를 참조하는 외부 데이터 원본을 만들려면 Azure Blob Storage를 외부 데이터 소스 위치(LOCATION)로 지정합니다.To create an external data source to reference your Azure blob storage container, specify the Azure blob storage URI as the external data source LOCATION. 인증을 위해 Azure Storage 계정 키를 PDW core-site.xml 파일에 추가합니다.Add your Azure storage account key to PDW core-site.xml file for authentication.

이 예제에서 외부 데이터 원본은 myaccount라는 Azure Storage 계정 아래의 dailylogs라는 Azure Blob Storage 컨테이너입니다.In this example, the external data source is an Azure blob storage container called dailylogs under Azure storage account named myaccount. Azure Storage 외부 데이터 원본은 데이터 전송만을 위한 것이며 조건자 푸시 다운을 지원하지 않습니다.The Azure storage external data source is for data transfer only and does not support predicate pushdown.

CREATE EXTERNAL DATA SOURCE MyAzureStorage WITH (
        TYPE = HADOOP, 
        LOCATION = 'wasbs://dailylogs@myaccount.blob.core.windows.net/'
);

예제: 대량 작업Examples: Bulk Operations

10.J. Azure Blob Storage에서 데이터를 검색하는 대량 작업을 위한 외부 데이터 원본을 만듭니다.Create an external data source for bulk operations retrieving data from Azure Blob storage.

적용 대상: SQL Server 2017(14.x)SQL Server 2017 (14.x)을 참조하세요.Applies to: SQL Server 2017(14.x)SQL Server 2017 (14.x).
BULK INSERT 또는 OPENROWSET을 사용하여 대량 작업에 대한 다음 데이터 원본을 만듭니다.Use the following data source for bulk operations using BULK INSERT or OPENROWSET. 사용되는 자격 증명은 SHARED ACCESS SIGNATURE을 ID로 사용하여 만들어져야 합니다.The credential used, must be created using SHARED ACCESS SIGNATURE as the identity. 공유 액세스 서명에 대한 자세한 내용은 SAS(공유 액세스 서명) 사용을 참조하세요.For more information on shared access signatures, see Using Shared Access Signatures (SAS).

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

사용 중인 이 예제를 보려면 BULK INSERT를 참조하세요.To see this example in use, see BULK INSERT.

참고 항목See Also

ALTER EXTERNAL DATA SOURCE(Transact-SQL)ALTER EXTERNAL DATA SOURCE (Transact-SQL)
CREATE EXTERNAL FILE FORMAT(Transact-SQL) CREATE EXTERNAL FILE FORMAT (Transact-SQL)
CREATE EXTERNAL TABLE(Transact-SQL) CREATE EXTERNAL TABLE (Transact-SQL)
CREATE EXTERNAL TABLE AS SELECT (Transact-SQL) CREATE EXTERNAL TABLE AS SELECT (Transact-SQL)
CREATE TABLE AS SELECT (Azure SQL Data Warehouse)CREATE TABLE AS SELECT (Azure SQL Data Warehouse)
sys.external_data_sources(Transact-SQL)sys.external_data_sources (Transact-SQL)