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

SQL Server, SQL Database, SQL Data Warehouse 또는 Analytics Platform System(병렬 데이터 웨어하우스 또는 PDW)를 사용하여 쿼리용 외부 데이터 원본을 만듭니다.Creates an external data source for querying using SQL Server, SQL Database, SQL Data Warehouse, or Analytics Platform System (Parallel Data Warehouse or PDW).

이 아티클에서는 원하는 SQL 제품에 대한 구문, 인수, 설명, 사용 권한 및 예제를 제공합니다.This article provides the syntax, arguments, remarks, permissions, and examples for whichever SQL product you choose.

구문 표기 규칙에 대한 자세한 내용은 Transact-SQL 구문 표기 규칙을 참조하십시오.For more information about the syntax conventions, see Transact-SQL Syntax Conventions.

제품을 클릭하세요.Click a product!

다음 행에서 관심이 있는 제품 이름을 클릭합니다.In the following row, click whichever product name you are interested in. 클릭하면 웹페이지의 여기에서 클릭한 제품에 적절한 다른 콘텐츠를 표시합니다.The click displays different content here on this webpage, appropriate for whichever product you click.

* SQL Server *  * SQL Server *   SQL 데이터베이스SQL Database SQL Data
Warehouse
SQL Data
Warehouse
Analytics Platform
System(PDW)
Analytics Platform
System (PDW)

 

개요: SQL ServerOverview: SQL Server

PolyBase 쿼리에 대한 외부 데이터 원본을 만듭니다.Creates an external data source for PolyBase queries. 외부 데이터 원본은 연결을 설정하고 다음과 같은 기본 사용 사례를 지원하는 데 사용됩니다.External data sources are used to establish connectivity and support these primary use cases:

  • PolyBase를 사용하여 데이터 가상화 및 데이터 로드Data virtualization and data load using PolyBase
  • BULK INSERT 또는 OPENROWSET를 사용한 대량 로드 작업Bulk load operations using BULK INSERT or OPENROWSET

적용 대상: SQL Server 2016 이상APPLIES TO: SQL Server 2016 (or higher)

구문Syntax

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

인수Arguments

data_source_namedata_source_name

데이터 원본에 대한 사용자 정의 이름을 지정합니다.Specifies the user-defined name for the data source. 이름은 SQL Server의 데이터베이스 내에서 반드시 고유해야 합니다.The name must be unique within the database in SQL Server.

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

외부 데이터 원본에 대한 연결 프로토콜 및 경로를 제공합니다.Provides the connectivity protocol and path to the external data source.

외부 데이터 원본External Data Source 위치 접두사Location prefix 위치 경로Location path 제품 / 서비스별로 지원되는 위치Supported locations by product / service
Cloudera 또는 HortonworksCloudera or Hortonworks hdfs <Namenode>[:port] SQL Server(2016+)SQL Server (2016+)
Azure Blob StorageAzure Blob Storage wasb[s] <container>@<storage_account>.blob.core.windows.net SQL Server(2016+)SQL Server (2016+)
SQL ServerSQL Server sqlserver <server_name>[\<instance_name>][:port] SQL Server(2019+)SQL Server (2019+)
OracleOracle oracle <server_name>[:port] SQL Server(2019+)SQL Server (2019+)
TeradataTeradata teradata <server_name>[:port] SQL Server(2019+)SQL Server (2019+)
MongoDB 또는 CosmosDBMongoDB or CosmosDB mongodb <server_name>[:port] SQL Server(2019+)SQL Server (2019+)
ODBCODBC odbc <server_name>{:port] SQL Server(2019+) - Windows에만SQL Server (2019+) - Windows only
대량 작업Bulk Operations https <storage_account>.blob.core.windows.net/<container> SQL Server(2017+)SQL Server (2017+)

위치 경로:Location path:

  • <Namenode> = Hadoop 클러스터에 있는 Namenode의 머신 이름, 이름서비스 URI 또는 IP 주소입니다.<Namenode> = the machine name, name service URI, or IP address of the Namenode in the Hadoop cluster. PolyBase는 Hadoop 클러스터에서 사용하는 모든 DNS 이름을 확인해야 합니다.PolyBase must resolve any DNS names used by the Hadoop cluster.
  • port = 외부 데이터 원본이 수신 대기 중인 포트입니다.port = The port that the external data source is listening on. Hadoop에서는 fs.default.name 구성 매개 변수를 사용하여 포트를 찾을 수 있습니다.In Hadoop, the port can be found using the fs.default.name configuration parameter. 기본값은 8020입니다.The default is 8020.
  • <container> = 데이터를 보관하는 스토리지 계정의 컨테이너입니다.<container> = the container of the storage account holding the data. 루트 컨테이너는 읽기 전용이므로 데이터를 컨테이너에 다시 쓸 수 없습니다.Root containers are read-only, data can't be written back to the container.
  • <storage_account> = Azure 리소스의 스토리지 계정 이름입니다.<storage_account> = the storage account name of the azure resource.
  • <server_name> = 호스트 이름입니다.<server_name> = the host name.
  • <instance_name> = SQL Server 명명된 인스턴스의 이름입니다.<instance_name> = the name of the SQL Server named instance. 대상 인스턴스에서 SQL Server Browser Service가 실행 중인 경우에 사용됩니다.Used if you have SQL Server Browser Service running on the target instance.

위치 설정 시 추가 참고 사항 및 지침:Additional notes and guidance when setting the location:

  • SQL 엔진은 개체가 생성될 때 외부 데이터 원본이 존재하는지 확인하지 않습니다.The SQL engine doesn't verify the existence of the external data source when the object is created. 유효성을 검사하려면 외부 데이터 원본을 사용하여 외부 테이블을 만듭니다.To validate, create an external table using the external data source.
  • 일관된 쿼리 의미 체계를 보장하기 위해 Hadoop을 쿼리할 때 모든 테이블에 대해 동일한 외부 데이터 원본을 사용합니다.Use the same external data source for all tables when querying Hadoop to ensure consistent querying semantics.
  • sqlserver 위치 접두사를 사용하여 SQL Server 2019를 SQL Server, SQL Database 또는 SQL Data Warehouse에 연결할 수 있습니다.You can use the sqlserver location prefix to connect SQL Server 2019 to SQL Server, SQL Database, or SQL Data Warehouse.
  • ODBC를 통해 연결할 때 Driver={<Name of Driver>}를 지정합니다.Specify the Driver={<Name of Driver>} when connecting via ODBC.
  • wasb는 Azure Blob 스토리지의 기본 프로토콜입니다.wasb is the default protocol for Azure blob storage. wasbs는 선택 사항이지만 보안 SSL 연결을 통해 데이터를 전송하므로 권장됩니다.wasbs is optional but recommended as data will be sent using a secure SSL connection.
  • Hadoop Namenode 장애 조치(failover) 중에 PolyBase 쿼리를 성공적으로 수행하려면 Hadoop 클러스터의 Namenode에 대한 가상 IP 주소 사용을 고려하세요.To ensure successful PolyBase queries during a Hadoop Namenode fail-over, consider using a virtual IP address for the Namenode of the Hadoop cluster. 그렇지 않은 경우 ALTER EXTERNAL DATA SOURCE 명령을 실행하여 새 위치를 가리킵니다.If you don't, execute an ALTER EXTERNAL DATA SOURCE command to point to the new location.

CONNECTION_OPTIONS = key_value_pairCONNECTION_OPTIONS = key_value_pair

ODBC를 외부 데이터 원본에 연결할 때 추가 옵션을 지정합니다.Specifies additional options when connecting over ODBC to an external data source.

드라이버의 이름은 최소한으로 필요하지만 설정에도 유용하고 문제 해결에 도움이 되는 APP='<your_application_name>' 또는 ApplicationIntent= ReadOnly|ReadWrite와 같은 다른 옵션이 있습니다.The name of the driver is required as a minimum but there are other options such as APP='<your_application_name>' or ApplicationIntent= ReadOnly|ReadWrite which are also useful to set and can assist with troubleshooting.

허용된 CONNECTION_OPTIONS의 목록은 ODBC 제품 설명서를 참조하세요.Refer to the ODBC product documentation for a list of permitted CONNECTION_OPTIONS

PUSHDOWN = ON | OFFPUSHDOWN = ON | OFF

외부 데이터 원본에 푸시 다운할 수 있는지 여부를 알려줍니다.States whether computation can be pushed down to the external data source. 기본적으로 설정되어 있습니다.It is on by default.

PUSHDOWN은 외부 데이터 원본 수준에서 SQL Server, Oracle, Teradata, MongoDB 또는 ODBC에 연결할 때 지원됩니다.PUSHDOWN is supported when connecting to SQL Server, Oracle, Teradata, MongoDB, or ODBC at the external data source level.

쿼리 수준에서 푸시 다운을 활성화 또는 비활성화는 힌트를 통해 구현됩니다.Enabling or disabling push-down at the query level is achieved through a hint.

CREDENTIAL = credential_nameCREDENTIAL = credential_name

외부 데이터 원본에 대해 인증하기 위한 데이터베이스 범위 자격 증명을 지정합니다.Specifies a database-scoped credential for authenticating to the external data source.

자격 증명 생성 시 추가 참고 사항 및 지침:Additional notes and guidance when creating a credential:

  • CREDENTIAL은 Blob이 보안된 경우에만 필요합니다.CREDENTIAL is only required if the blob has been secured. 익명 액세스를 허용하는 데이터 세트에는 CREDENTIAL이 필요하지 않습니다.CREDENTIAL isn't required for data sets that allow anonymous access.
  • TYPE = BLOB_STORAGE가 ID로 SHARED ACCESS SIGNATURE를 사용하여 자격 증명을 만들어야 하는 경우When the TYPE = BLOB_STORAGE the credential must be created using SHARED ACCESS SIGNATURE as the identity. 또한 SAS 토큰은 다음과 같이 구성되어야 합니다.Furthermore, the SAS token should be configured as follows:
    • 비밀로 구성된 경우 앞에 오는 ? 제외Exclude the leading ? when configured as the secret
    • 로드해야 하는 파일에 대해 적어도 읽기 권한이 있어야 합니다(예: srt=o&sp=r).Have at least read permission on the file that should be loaded (for example srt=o&sp=r)
    • 유효한 만료 기간을 사용합니다(모든 날짜는 UTC 시간임).Use a valid expiration period (all dates are in UTC time).

SHARED ACCESS SIGNATURETYPE = BLOB_STORAGE와 함께 CREDENTIAL을 사용하는 예제는 대량 작업을 실행하고 Azure Blob Storage에서 SQL Database로 데이터를 검색하기 위한 외부 데이터 원본 만들기를 참조하세요.For an example of using a CREDENTIAL with SHARED ACCESS SIGNATURE and TYPE = BLOB_STORAGE, see Create an external data source to execute bulk operations and retrieve data from Azure Blob Storage into SQL Database

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

TYPE = [ HADOOP | BLOB_STORAGE ]TYPE = [ HADOOP | BLOB_STORAGE ]

구성 중인 외부 데이터 원본의 유형을 지정합니다.Specifies the type of the external data source being configured. 이 매개 변수가 항상 필요한 것은 아닙니다.This parameter isn't always required.

  • 외부 데이터 원본이 Cloudera, Hortonworks, Azure Blob Storage이면 HADOOP을 사용합니다.Use HADOOP when the external data source is Cloudera, Hortonworks, or Azure Blob Storage.
  • SQL Server 2017(14.x)SQL Server 2017 (14.x)와 함께 BULK INSERT 또는 OPENROWSET를 통해 대량 작업을 실행하는 경우 BLOB_STORAGE를 사용합니다.Use BLOB_STORAGE when executing bulk operations with BULK INSERT, or OPENROWSET with SQL Server 2017(14.x)SQL Server 2017 (14.x).

중요

기타 외부 데이터 원본을 사용하는 경우 TYPE을 설정하지 마세요.Do not set TYPE if using any other external data source.

TYPE = HADOOP을 사용하여 Azure Blob Storage에서 데이터를 로드하는 예제는 Azure Blob Storage를 참조하는 외부 데이터 원본 만들기를 참조하세요.For an example of using TYPE = HADOOP to load data from Azure Blob Storage, see Create external data source to reference Azure blob storage.

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'

Hortonworks 또는 Cloudera에 연결할 때 이 선택적 값을 구성합니다.Configure this optional value when connecting to Hortonworks or Cloudera.

RESOURCE_MANAGER_LOCATION이 정의되면 쿼리 최적화 프로그램은 성능 향상을 위해 비용 기반 결정을 내립니다.When the RESOURCE_MANAGER_LOCATION is defined, the query optimizer will make a cost-based decision to improve performance. MapReduce 작업을 사용하여 Hadoop으로 계산을 푸시 다운할 수 있습니다.A MapReduce job can be used to push down the computation to Hadoop. RESOURCE_MANAGER_LOCATION을 지정하면 Hadoop과 SQL 간에 전송되는 데이터 양을 크게 줄여 쿼리 성능을 향상시킬 수 있습니다.Specifying the RESOURCE_MANAGER_LOCATION can significantly reduce the volume of data transferred between Hadoop and SQL, which can lead to improved query performance.

리소스 관리자를 지정하지 않은 경우 Hadoop에 대한 푸시 컴퓨팅은 PolyBase 쿼리에 대해 비활성화됩니다.If the Resource Manager isn't specified, pushing compute to Hadoop is disabled for PolyBase queries.

포트를 지정하지 않을 경우 기본값은 'hadoop 연결' 구성에 대한 현재 설정을 사용하여 선택됩니다.If the port isn't specified, the default value is chosen 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 supported Hadoop versions, see PolyBase Connectivity Configuration (Transact-SQL).

중요

외부 데이터 원본을 만들 때 RESOURCE_MANAGER_LOCATION 값의 유효성이 검사되지 않습니다.The RESOURCE_MANAGER_LOCATION value is not validated when you create the external data source. 잘못된 값을 입력하면 제공된 값을 확인할 수 없으므로 푸시 다운을 시도할 때마다 실행 시 쿼리 오류가 발생할 수 있습니다.Entering an incorrect value may cause query failure at execution time whenever push-down is attempted as the provided value would not be able to resolve.

푸시 다운이 활성화된 Hadoop을 참조하는 외부 데이터 원본 만들기는 구체적인 예제와 추가 지침을 제공합니다.Create external data source to reference Hadoop with push-down enabled provides a concrete example and further guidance.

사용 권한Permissions

SQL Server의 데이터베이스에 대한 CONTROL 권한이 필요합니다.Requires CONTROL permission on database in SQL Server.

잠금Locking

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

보안Security

PolyBase는 대부분의 외부 데이터 원본에 대해 프록시 기반 인증을 지원합니다.PolyBase supports proxy based authentication for most external data sources. 데이터베이스 범위 자격 증명을 생성하여 프록시 계정을 만듭니다.Create a database scoped credential to create the proxy account.

SQL Server 빅 데이터 클러스터의 스토리지 또는 데이터 풀에 연결하면 사용자의 자격 증명이 백 엔드 시스템을 통해 전달됩니다.When you connect to the storage or data pool in a SQL Server big data cluster, the user's credentials are passed through to the back-end system. 통과 인증을 사용하도록 설정하려면 데이터 풀 자체의 로그인을 만듭니다.Create logins in the data pool itself to enable pass through authentication.

현재 HADOOP 유형의 SAS 토큰이 지원되지 않습니다.Currently a SAS token with type HADOOP is unsupported. 스토리지 계정 액세스 키에서만 지원됩니다.It's only supported with a storage account access key. HADOOP 유형 및 SAS 자격 증명으로 외부 데이터 원본을 만들려고 하면 다음 오류로 인해 실패합니다.Attempting to create an external data source with type HADOOP and a SAS credential fails with the following error:

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.'

예: SQL Server(2016+)Examples: SQL Server (2016+)

1.A. Oracle을 참조하는 SQL 2019에서 외부 데이터 원본 만들기Create external data source in SQL 2019 to reference Oracle

Oracle을 참조하는 외부 데이터 원본을 만들려면 데이터베이스 범위 자격 증명이 있는지 확인합니다.To create an external data source that references Oracle, ensure you have a database scoped credential. 이 데이터 원본에 대한 계산 푸시 다운을 활성화하거나 비활성화할 수도 있습니다.You may optionally also enable or disable push-down of computation against this 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 = '!MyC0mpl3xP@ssw0rd!
;

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

MongoDB와 같은 다른 데이터 원본에 대한 추가 예제는 MongoDB에서 외부 데이터에 액세스하도록 PolyBase 구성을 참조하세요.For additional examples to other data sources such as MongoDB, see Configure PolyBase to access external data in MongoDB

2.B. 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
(    LOCATION = 'hdfs://10.10.10.10:8050'
,    TYPE     = HADOOP
)
;

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

RESOURCE_MANAGER_LOCATION 옵션을 지정하여 PolyBase 쿼리에 대한 Hadoop 계산 푸시 다운을 활성화합니다.Specify the RESOURCE_MANAGER_LOCATION option to enable push-down computation to Hadoop for PolyBase queries. 활성화되면 PolyBase는 쿼리 계산을 Hadoop에 푸시해야 하는지 여부를 결정하기 위해 비용 기반 결정을 내립니다.Once enabled, PolyBase makes a cost-based decision to determine whether the query computation should be pushed to 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.D. 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
(    LOCATION                  = 'hdfs://10.10.10.10:8050'
,    CREDENTIAL                = HadoopUser1
,    TYPE                      = HADOOP
,    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
)
;

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

이 예제에서 외부 데이터 원본은 logs라는 Azure Storage 계정 아래의 daily라는 Azure Blob Storage 컨테이너입니다.In this example, the external data source is an Azure blob storage container called daily under Azure storage account named logs. Azure 스토리지 외부 데이터 원본은 데이터 전송 전용입니다.The Azure storage external data source is for data transfer only. 조건자 푸시 다운을 지원하지 않습니다.It doesn't support predicate push-down.

이 예제에서는 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. Azure 스토리지에 대한 인증 중에는 사용되지 않으므로 데이터베이스 범위 지정 자격 증명 ID에 문자열을 지정할 수 있습니다.You can specify any string in database scoped credential identity as it isn't used during authentication to Azure storage.

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

예: 대량 작업Examples: Bulk Operations

참고

대량 작업을 위해 외부 데이터 원본을 구성할 때 LOCATION URL 끝에 추적 / , 파일 이름 또는 공유 액세스 서명 매개 변수를 배치하지 마세요.Do not put a trailing /, file name, or shared access signature parameters at the end of the LOCATION URL when configuring an external data source for bulk operations.

F.F. Azure Blob 스토리지에서 데이터를 검색하는 대량 작업을 위한 외부 데이터 원본 만들기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로 설정해야 하며 SAS 토큰에서 앞에 ?가 없어야 하며, 적어도 로드할 파일에 대한 읽기 권한이 있어야 하고(예: srt=o&sp=r) 만료 기간이 유효해야 합니다(모든 날짜는 UTC 시간임).The credential must set SHARED ACCESS SIGNATURE as the identity, mustn't have the leading ? in the SAS token, must have at least read permission on the file that should be loaded (for example srt=o&sp=r), and the expiration period should be valid (all dates are in UTC time). 공유 액세스 서명에 대한 자세한 내용은 SAS(공유 액세스 서명) 사용을 참조하세요.For more information on shared access signatures, see Using Shared Access Signatures (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를 참조하세요.To see this example in use, see BULK INSERT.

참고 항목See Also

SQL ServerSQL Server * SQL Database *  * SQL Database *   SQL Data
Warehouse
SQL Data
Warehouse
Analytics Platform
System(PDW)
Analytics Platform
System (PDW)

 

개요: Azure SQL 데이터베이스Overview: Azure SQL Database

탄력적 쿼리에 대한 외부 데이터 원본을 만듭니다.Creates an external data source for elastic queries. 외부 데이터 원본은 연결을 설정하고 이러한 기본 사용 사례를 지원하는 데 사용됩니다.External data sources are used to establish connectivity and support these primary use cases:

  • BULK INSERT 또는 OPENROWSET를 사용한 대량 로드 작업Bulk load operations using BULK INSERT or OPENROWSET
  • 탄력적 쿼리로 SQL Database를 사용하여 원격 SQL Database 또는 SQL Data Warehouse 인스턴스 쿼리Query remote SQL Database or SQL Data Warehouse instances using SQL Database with elastic query
  • 탄력적 쿼리를 사용하여 분할된 Azure SQL Database 쿼리Query a sharded Azure SQL Database using elastic query

구문Syntax

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

인수Arguments

data_source_namedata_source_name

데이터 원본에 대한 사용자 정의 이름을 지정합니다.Specifies the user-defined name for the data source. 이름은 SQL DB(SQL Database)의 데이터베이스 내에서 반드시 고유해야 합니다.The name must be unique within the database in SQL Database (SQL DB).

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

외부 데이터 원본에 대한 연결 프로토콜 및 경로를 제공합니다.Provides the connectivity protocol and path to the external data source.

외부 데이터 원본External Data Source 위치 접두사Location prefix 위치 경로Location path
대량 작업Bulk Operations https <storage_account>.blob.core.windows.net/<container>
탄력적 쿼리(분할)Elastic Query (shard) 필수 아님Not required <shard_map_server_name>.database.windows.net
탄력적 쿼리(원격)Elastic Query (remote) 필수 아님Not required <remote_server_name>.database.windows.net

위치 경로:Location path:

  • <shard_map_server_name> = 분할된 맵 관리자를 호스팅하는 Azure의 논리 서버 이름입니다.<shard_map_server_name> = The logical server name in Azure that is hosting the shard map manager. DATABASE_NAME 인수는 분할된 맵을 호스트하는 데 사용되는 데이터베이스를 제공하고 SHARD_MAP_NAME은 분할된 맵 자체에 사용됩니다.The DATABASE_NAME argument provides the database used to host the shard map and SHARD_MAP_NAME is used for the shard map itself.
  • <remote_server_name> = 탄력적 쿼리에 대한 대상 논리 서버 이름입니다.<remote_server_name> = The target logical server name for the elastic query. 데이터베이스 이름은 DATABASE_NAME 인수를 사용하여 지정됩니다.The database name is specified using the DATABASE_NAME argument.

위치 설정 시 추가 참고 사항 및 지침:Additional notes and guidance when setting the location:

  • SQL Database 엔진은 개체가 생성될 때 외부 데이터 원본이 존재하는지 확인하지 않습니다.The SQL Database engine doesn't verify the existence of the external data source when the object is created. 유효성을 검사하려면 외부 데이터 원본을 사용하여 외부 테이블을 만듭니다.To validate, create an external table using the external data source.

CREDENTIAL = credential_nameCREDENTIAL = credential_name

외부 데이터 원본에 대해 인증하기 위한 데이터베이스 범위 자격 증명을 지정합니다.Specifies a database-scoped credential for authenticating to the external data source.

자격 증명 생성 시 추가 참고 사항 및 지침:Additional notes and guidance when creating a credential:

  • Azure Blob Storage에서 SQL Database로 데이터를 로드하려면 Azure Storage Key를 사용합니다.To load data from Azure Blob storage into SQL Database, use an Azure Storage Key.
  • CREDENTIAL은 Blob이 보안된 경우에만 필요합니다.CREDENTIAL is only required if the blob has been secured. 익명 액세스를 허용하는 데이터 세트에는 CREDENTIAL이 필요하지 않습니다.CREDENTIAL isn't required for data sets that allow anonymous access.
  • TYPE = BLOB_STORAGE가 ID로 SHARED ACCESS SIGNATURE를 사용하여 자격 증명을 만들어야 하는 경우When the TYPE = BLOB_STORAGE the credential must be created using SHARED ACCESS SIGNATURE as the identity. 또한 SAS 토큰은 다음과 같이 구성되어야 합니다.Furthermore, the SAS token should be configured as follows:
    • 비밀로 구성된 경우 앞에 오는 ? 제외Exclude the leading ? when configured as the secret
    • 로드해야 하는 파일에 대해 적어도 읽기 권한이 있어야 합니다(예: srt=o&sp=r).Have at least read permission on the file that should be loaded (for example srt=o&sp=r)
    • 유효한 만료 기간을 사용합니다(모든 날짜는 UTC 시간임).Use a valid expiration period (all dates are in UTC time).

SHARED ACCESS SIGNATURETYPE = BLOB_STORAGE와 함께 CREDENTIAL을 사용하는 예제는 대량 작업을 실행하고 Azure Blob Storage에서 SQL Database로 데이터를 검색하기 위한 외부 데이터 원본 만들기를 참조하세요.For an example of using a CREDENTIAL with SHARED ACCESS SIGNATURE and TYPE = BLOB_STORAGE, see Create an external data source to execute bulk operations and retrieve data from Azure Blob Storage into SQL Database

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

TYPE = [ BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER]TYPE = [ BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER]

구성 중인 외부 데이터 원본의 유형을 지정합니다.Specifies the type of the external data source being configured. 이 매개 변수가 항상 필요한 것은 아닙니다.This parameter isn't always required.

  • SQL Database에서 탄력적 쿼리를 통해 데이터베이스 간 쿼리에 RDBMS를 사용합니다.Use RDBMS for cross-database queries using elastic query from SQL Database.
  • 분할된 SQL Database에 연결할 때 외부 데이터 원본을 만드는 경우 SHARD_MAP_MANAGER를 사용합니다.Use SHARD_MAP_MANAGER when creating an external data source when connecting to a sharded SQL Database.
  • BULK INSERT 또는 OPENROWSET를 통해 대량 작업을 실행하는 경우 BLOB_STORAGE를 사용합니다.Use BLOB_STORAGE when executing bulk operations with BULK INSERT, or OPENROWSET.

중요

기타 외부 데이터 원본을 사용하는 경우 TYPE을 설정하지 마세요.Do not set TYPE if using any other external data source.

DATABASE_NAME = database_nameDATABASE_NAME = database_name

TYPERDBMS 또는 SHARD_MAP_MANAGER로 설정된 경우 이 인수를 구성합니다.Configure this argument when the TYPE is set to RDBMS or SHARD_MAP_MANAGER.

TYPETYPE DATABASE_NAME의 값Value of DATABASE_NAME
RDBMSRDBMS LOCATION을 사용하여 제공된 서버의 원격 데이터베이스 이름The name of the remote database on the server provided using LOCATION
SHARD_MAP_MANAGERSHARD_MAP_MANAGER 분할된 맵 관리자로 작동하는 데이터베이스의 이름Name of the database operating as the shard map manager

TYPE = RDBMS에서 외부 데이터 원본을 만드는 방법을 보여주는 예제는 RDBMS 외부 데이터 원본 만들기를 참조하세요.For an example showing how to create an external data source where TYPE = RDBMS refer to Create an RDBMS external data source

SHARD_MAP_NAME = shard_map_nameSHARD_MAP_NAME = shard_map_name

TYPE 인수가 SHARD_MAP_MANAGER로 설정된 경우에만 분할된 맵의 이름을 설정하는 데 사용됩니다.Used when the TYPE argument is set to SHARD_MAP_MANAGER only to set the name of the shard map.

TYPE = SHARD_MAP_MANAGER에서 외부 데이터 원본을 만드는 방법을 보여주는 예제는 분할된 맵 관리자 외부 데이터 원본 만들기를 참조하세요.For an example showing how to create an external data source where TYPE = SHARD_MAP_MANAGER refer to Create a shard map manager external data source

사용 권한Permissions

SQL Database의 데이터베이스에 대한 CONTROL 권한이 필요합니다.Requires CONTROL permission on database in SQL Database.

잠금Locking

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

예:Examples:

1.A. 분할된 맵 관리자 외부 데이터 원본 만들기Create a shard map manager external data source

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

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

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

예: 대량 작업Examples: Bulk Operations

참고

대량 작업을 위해 외부 데이터 원본을 구성할 때 LOCATION URL 끝에 추적 / , 파일 이름 또는 공유 액세스 서명 매개 변수를 배치하지 마세요.Do not put a trailing /, file name, or shared access signature parameters at the end of the LOCATION URL when configuring an external data source for bulk operations.

C.C. Azure Blob 스토리지에서 데이터를 검색하는 대량 작업을 위한 외부 데이터 원본 만들기Create an external data source for bulk operations retrieving data from Azure Blob storage

BULK INSERT 또는 OPENROWSET을 사용하여 대량 작업에 대한 다음 데이터 원본을 만듭니다.Use the following data source for bulk operations using BULK INSERT or OPENROWSET. 자격 증명은 SHARED ACCESS SIGNATURE를 ID로 설정해야 하며 SAS 토큰에서 앞에 ?가 없어야 하며, 적어도 로드할 파일에 대한 읽기 권한이 있어야 하고(예: srt=o&sp=r) 만료 기간이 유효해야 합니다(모든 날짜는 UTC 시간임).The credential must set SHARED ACCESS SIGNATURE as the identity, mustn't have the leading ? in the SAS token, must have at least read permission on the file that should be loaded (for example srt=o&sp=r), and the expiration period should be valid (all dates are in UTC time). 공유 액세스 서명에 대한 자세한 내용은 SAS(공유 액세스 서명) 사용을 참조하세요.For more information on shared access signatures, see Using Shared Access Signatures (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를 참조하세요.To see this example in use, see BULK INSERT.

참고 항목See Also

SQL ServerSQL Server SQL 데이터베이스SQL Database * SQL Data
Warehouse *
 
* SQL Data
Warehouse *
 
Analytics Platform
System(PDW)
Analytics Platform
System (PDW)

 

개요: Azure SQL 데이터 웨어하우스Overview: Azure SQL Data Warehouse

PolyBase에 대한 외부 데이터 원본을 만듭니다.Creates an external data source for PolyBase. 외부 데이터 원본은 연결을 설정하고 다음과 같은 기본 사용 사례를 지원하는 데 사용됩니다. PolyBase를 사용하여 데이터 가상화 및 데이터 로드External data sources are used to establish connectivity and support the following primary use case: Data virtualization and data load using PolyBase

중요

탄력적 쿼리로 SQL Database를 사용하여 SQL Data Warehouse 인스턴스를 쿼리하는 외부 데이터 원본을 만들려면 SQL Database를 참조하세요.To create an external data source to query a SQL Data Warehouse instances using SQL Database with elastic query, see SQL Database.

구문Syntax

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

인수Arguments

data_source_namedata_source_name

데이터 원본에 대한 사용자 정의 이름을 지정합니다.Specifies the user-defined name for the data source. 이름은 SQL DW(SQL Data Warehouse)의 데이터베이스 내에서 반드시 고유해야 합니다.The name must be unique within the database in SQL Data Warehouse (SQL DW).

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

외부 데이터 원본에 대한 연결 프로토콜 및 경로를 제공합니다.Provides the connectivity protocol and path to the external data source.

외부 데이터 원본External Data Source 위치 접두사Location prefix 위치 경로Location path
Azure Blob StorageAzure Blob Storage wasb[s] <container>@<storage_account>.blob.core.windows.net
Azure Data Lake Store Gen 1Azure Data Lake Store Gen 1 adl <storage_account>.azuredatalake.net
Azure Data Lake Store Gen 2Azure Data Lake Store Gen 2 abfs[s] <container>@<storage_account>.dfs.core.windows.net

위치 경로:Location path:

  • <container> = 데이터를 보관하는 스토리지 계정의 컨테이너입니다.<container> = the container of the storage account holding the data. 루트 컨테이너는 읽기 전용이므로 데이터를 컨테이너에 다시 쓸 수 없습니다.Root containers are read-only, data can't be written back to the container.
  • <storage_account> = Azure 리소스의 스토리지 계정 이름입니다.<storage_account> = the storage account name of the azure resource.

위치 설정 시 추가 참고 사항 및 지침:Additional notes and guidance when setting the location:

  • 기본 옵션은 Azure Data Lake Storage 2세대 프로비저닝 시 보안 SSL 연결을 사용하는 것입니다.The default option is to use enable secure SSL connections when provisioning Azure Data Lake Storage Gen 2. 이 기능을 사용하도록 설정한 경우 보안 SSL 연결을 선택할 때 abfss를 사용해야 합니다.When this is enabled, you must use abfss when a secure SSL connection is selected. abfss는 보안되지 않은 SSL 연결에서도 작동합니다.Note abfssworks for unsecure SSL connections as well.
  • SQL Data Warehouse 엔진은 개체가 생성될 때 외부 데이터 원본이 존재하는지 확인하지 않습니다.The SQL Data Warehouse engine doesn't verify the existence of the external data source when the object is created. 유효성을 검사하려면 외부 데이터 원본을 사용하여 외부 테이블을 만듭니다.To validate, create an external table using the external data source.
  • 일관된 쿼리 의미 체계를 보장하기 위해 Hadoop을 쿼리할 때 모든 테이블에 대해 동일한 외부 데이터 원본을 사용합니다.Use the same external data source for all tables when querying Hadoop to ensure consistent querying semantics.
  • wasb는 Azure Blob 스토리지의 기본 프로토콜입니다.wasb is the default protocol for Azure blob storage. wasbs는 선택 사항이지만 보안 SSL 연결을 통해 데이터를 전송하므로 권장됩니다.wasbs is optional but recommended as data will be sent using a secure SSL connection.

CREDENTIAL = credential_nameCREDENTIAL = credential_name

외부 데이터 원본에 대해 인증하기 위한 데이터베이스 범위 자격 증명을 지정합니다.Specifies a database-scoped credential for authenticating to the external data source.

자격 증명 생성 시 추가 참고 사항 및 지침:Additional notes and guidance when creating a credential:

  • Azure Blob Storage 또는 ADLS(Azure Data Lake Store) Gen 2에서 SQL DW로 데이터를 로드하려면 Azure Storage Key를 사용합니다.To load data from Azure Blob Storage or Azure Data Lake Store (ADLS) Gen 2 into SQL DW, use an Azure Storage Key.
  • CREDENTIAL은 Blob이 보안된 경우에만 필요합니다.CREDENTIAL is only required if the blob has been secured. 익명 액세스를 허용하는 데이터 세트에는 CREDENTIAL이 필요하지 않습니다.CREDENTIAL isn't required for data sets that allow anonymous access.

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

TYPE = [ HADOOP | BLOB_STORAGE ]TYPE = [ HADOOP | BLOB_STORAGE ]

구성 중인 외부 데이터 원본의 유형을 지정합니다.Specifies the type of the external data source being configured. 이 매개 변수가 항상 필요한 것은 아닙니다.This parameter isn't always required.

  • 외부 데이터 원본이 Azure Blob Storage, ADLS Gen 1 또는 ADLS Gen 2 경우 HADOOP을 사용합니다.Use HADOOP when the external data source is Azure Blob Storage, ADLS Gen 1, or ADLS Gen 2.

중요

기타 외부 데이터 원본을 사용하는 경우 TYPE을 설정하지 마세요.Do not set TYPE if using any other external data source.

TYPE = HADOOP을 사용하여 Azure Blob Storage에서 데이터를 로드하는 예제는 Azure Blob Storage를 참조하는 외부 데이터 원본 만들기를 참조하세요.For an example of using TYPE = HADOOP to load data from Azure Blob Storage, see Create external data source to reference Azure blob storage.

사용 권한Permissions

SQL Data Warehouse의 데이터베이스에 대한 CONTROL 권한이 필요합니다.Requires CONTROL permission on database in SQL Data Warehouse.

잠금Locking

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

보안Security

PolyBase는 대부분의 외부 데이터 원본에 대해 프록시 기반 인증을 지원합니다.PolyBase supports proxy based authentication for most external data sources. 데이터베이스 범위 자격 증명을 생성하여 프록시 계정을 만듭니다.Create a database scoped credential to create the proxy account.

SQL Server 빅 데이터 클러스터의 스토리지 또는 데이터 풀에 연결하면 사용자의 자격 증명이 백 엔드 시스템을 통해 전달됩니다.When you connect to the storage or data pool in a SQL Server big data cluster, the user's credentials are passed through to the back-end system. 통과 인증을 사용하도록 설정하려면 데이터 풀 자체의 로그인을 만듭니다.Create logins in the data pool itself to enable pass through authentication.

현재 HADOOP 유형의 SAS 토큰이 지원되지 않습니다.Currently a SAS token with type HADOOP is unsupported. 스토리지 계정 액세스 키에서만 지원됩니다.It's only supported with a storage account access key. HADOOP 유형 및 SAS 자격 증명으로 외부 데이터 원본을 만들려고 하면 다음 오류로 인해 실패합니다.Attempting to create an external data source with type HADOOP and a SAS credential fails with the following error:

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.'

예:Examples:

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

이 예제에서 외부 데이터 원본은 logs라는 Azure Storage 계정 아래의 daily라는 Azure Blob Storage 컨테이너입니다.In this example, the external data source is an Azure blob storage container called daily under Azure storage account named logs. Azure 스토리지 외부 데이터 원본은 데이터 전송 전용입니다.The Azure storage external data source is for data transfer only. 조건자 푸시 다운을 지원하지 않습니다.It doesn't support predicate push-down.

이 예제에서는 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. Azure 스토리지에 대한 인증 중에는 사용되지 않으므로 데이터베이스 범위 지정 자격 증명 ID에 문자열을 지정할 수 있습니다.You can specify any string in database scoped credential identity as it isn't used during authentication to Azure storage.

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

2.B. Azure Data Lake Store Gen 1 또는 2를 참조하거나 서비스 주체를 사용하여 외부 데이터 소스를 생성합니다.Create external data source to reference Azure Data Lake Store Gen 1 or 2 using a service principal

Azure Data Lake Store 연결은 ADLS URI 및 Azure Active directory 애플리케이션의 서비스 원칙을 기반으로할 수 있습니다.Azure Data lake Store connectivity can be based on your ADLS URI and your Azure Active directory Application's service principal. 이 애플리케이션을 만들기 위한 설명서는 [Active Directory를 사용하여 Data Lake 저장소 인증][azure_ad[]에서 찾을 수 있습니다.Documentation for creating this application can be found at [Data lake store authentication using Active Directory][azure_ad[].

-- 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 Gen 2 - 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 2 account name and URI
-- CREDENTIAL: Provide the credential created in the previous step
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH
(    LOCATION       = 'abfss://newyorktaxidataset.azuredatalakestore.net' -- Please note the abfss endpoint when your account has secure transfer enabled
,    CREDENTIAL     = ADLS_credential
,    TYPE           = HADOOP
)
;

C.C. Azure Data Lake Store Gen 2를 참조하거나 스토리지 계정 키를 사용하여 외부 데이터 소스를 생성합니다.Create external data source to reference Azure Data Lake Store Gen 2 using the storage account key

-- 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 Gen 2 secured endpoint (abfss)
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
(    LOCATION   = 'abfss://2013@newyorktaxidataset.dfs.core.windows.net'
,    CREDENTIAL = ADLS_credential
,    TYPE       = HADOOP
)
[;]

참고 항목See Also

SQL ServerSQL Server SQL 데이터베이스SQL Database SQL Data
Warehouse
SQL Data
Warehouse
* Analytics
Platform System(PDW) *
 
* Analytics
Platform System (PDW) *
 

 

개요: 분석 플랫폼 시스템Overview: Analytics Platform System

PolyBase 쿼리에 대한 외부 데이터 원본을 만듭니다.Creates an external data source for PolyBase queries. 외부 데이터 원본은 연결을 설정하고 다음과 같은 사용 사례를 지원하는 데 사용됩니다. PolyBase를 사용하여 데이터 가상화 및 데이터 로드External data sources are used to establish connectivity and support the following use case: Data virtualization and data load using PolyBase

구문Syntax

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

인수Arguments

data_source_namedata_source_name

데이터 원본에 대한 사용자 정의 이름을 지정합니다.Specifies the user-defined name for the data source. 이름은 Analytics Platform System(병렬 데이터 웨어하우스 또는 PDW)의 서버 내에서 반드시 고유해야 합니다.The name must be unique within the server in Analytics Platform System (Parallel Data Warehouse or PDW).

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

외부 데이터 원본에 대한 연결 프로토콜 및 경로를 제공합니다.Provides the connectivity protocol and path to the external data source.

외부 데이터 원본External Data Source 위치 접두사Location prefix 위치 경로Location path
Cloudera 또는 HortonworksCloudera or Hortonworks hdfs <Namenode>[:port]
Azure Blob StorageAzure Blob Storage wasb[s] <container>@<storage_account>.blob.core.windows.net

위치 경로:Location path:

  • <Namenode> = Hadoop 클러스터에 있는 Namenode의 머신 이름, 이름서비스 URI 또는 IP 주소입니다.<Namenode> = the machine name, name service URI, or IP address of the Namenode in the Hadoop cluster. PolyBase는 Hadoop 클러스터에서 사용하는 모든 DNS 이름을 확인해야 합니다.PolyBase must resolve any DNS names used by the Hadoop cluster.
  • port = 외부 데이터 원본이 수신 대기 중인 포트입니다.port = The port that the external data source is listening on. Hadoop에서는 fs.default.name 구성 매개 변수를 사용하여 포트를 찾을 수 있습니다.In Hadoop, the port can be found using the fs.default.name configuration parameter. 기본값은 8020입니다.The default is 8020.
  • <container> = 데이터를 보관하는 스토리지 계정의 컨테이너입니다.<container> = the container of the storage account holding the data. 루트 컨테이너는 읽기 전용이므로 데이터를 컨테이너에 다시 쓸 수 없습니다.Root containers are read-only, data can't be written back to the container.
  • <storage_account> = Azure 리소스의 스토리지 계정 이름입니다.<storage_account> = the storage account name of the azure resource.

위치 설정 시 추가 참고 사항 및 지침:Additional notes and guidance when setting the location:

  • PDW 엔진은 개체가 생성될 때 외부 데이터 원본이 존재하는지 확인하지 않습니다.The PDW engine doesn't verify the existence of the external data source when the object is created. 유효성을 검사하려면 외부 데이터 원본을 사용하여 외부 테이블을 만듭니다.To validate, create an external table using the external data source.
  • 일관된 쿼리 의미 체계를 보장하기 위해 Hadoop을 쿼리할 때 모든 테이블에 대해 동일한 외부 데이터 원본을 사용합니다.Use the same external data source for all tables when querying Hadoop to ensure consistent querying semantics.
  • wasb는 Azure Blob 스토리지의 기본 프로토콜입니다.wasb is the default protocol for Azure blob storage. wasbs는 선택 사항이지만 보안 SSL 연결을 통해 데이터를 전송하므로 권장됩니다.wasbs is optional but recommended as data will be sent using a secure SSL connection.
  • Hadoop Namenode 장애 조치(failover) 중에 PolyBase 쿼리를 성공적으로 수행하려면 Hadoop 클러스터의 Namenode에 대한 가상 IP 주소 사용을 고려하세요.To ensure successful PolyBase queries during a Hadoop Namenode fail-over, consider using a virtual IP address for the Namenode of the Hadoop cluster. 그렇지 않은 경우 ALTER EXTERNAL DATA SOURCE 명령을 실행하여 새 위치를 가리킵니다.If you don't, execute an ALTER EXTERNAL DATA SOURCE command to point to the new location.

CREDENTIAL = credential_nameCREDENTIAL = credential_name

외부 데이터 원본에 대해 인증하기 위한 데이터베이스 범위 자격 증명을 지정합니다.Specifies a database-scoped credential for authenticating to the external data source.

자격 증명 생성 시 추가 참고 사항 및 지침:Additional notes and guidance when creating a credential:

  • Azure Blob 스토리지 또는 ADLS(Azure Data Lake Store) Gen 2에서 SQL DW 또는 PDW로 데이터를 로드하려면 Azure Storage Key를 사용합니다.To load data from either Azure Blob storage or Azure Data Lake Store (ADLS) Gen 2 into SQL DW or PDW, use an Azure Storage Key.
  • CREDENTIAL은 Blob이 보안된 경우에만 필요합니다.CREDENTIAL is only required if the blob has been secured. 익명 액세스를 허용하는 데이터 세트에는 CREDENTIAL이 필요하지 않습니다.CREDENTIAL isn't required for data sets that allow anonymous access.

TYPE = [ HADOOP ]TYPE = [ HADOOP ]

구성 중인 외부 데이터 원본의 유형을 지정합니다.Specifies the type of the external data source being configured. 이 매개 변수가 항상 필요한 것은 아닙니다.This parameter isn't always required.

  • 외부 데이터 원본이 Cloudera, Hortonworks, Azure Blob Storage이면 HADOOP을 사용합니다.Use HADOOP when the external data source is Cloudera, Hortonworks, or Azure Blob Storage.

중요

기타 외부 데이터 원본을 사용하는 경우 TYPE을 설정하지 마세요.Do not set TYPE if using any other external data source.

TYPE = HADOOP을 사용하여 Azure Blob Storage에서 데이터를 로드하는 예제는 Azure Blob Storage를 참조하는 외부 데이터 원본 만들기를 참조하세요.For an example of using TYPE = HADOOP to load data from Azure Blob Storage, see Create external data source to reference Azure blob storage.

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]'

Hortonworks 또는 Cloudera에 연결할 때 이 선택적 값을 구성합니다.Configure this optional value when connecting to Hortonworks or Cloudera.

RESOURCE_MANAGER_LOCATION이 정의되면 쿼리 최적화 프로그램은 성능 향상을 위해 비용 기반 결정을 내립니다.When the RESOURCE_MANAGER_LOCATION is defined, the query optimizer will make a cost-based decision to improve performance. MapReduce 작업을 사용하여 Hadoop으로 계산을 푸시 다운할 수 있습니다.A MapReduce job can be used to push down the computation to Hadoop. RESOURCE_MANAGER_LOCATION을 지정하면 Hadoop과 SQL 간에 전송되는 데이터 양을 크게 줄여 쿼리 성능을 향상시킬 수 있습니다.Specifying the RESOURCE_MANAGER_LOCATION can significantly reduce the volume of data transferred between Hadoop and SQL, which can lead to improved query performance.

리소스 관리자를 지정하지 않은 경우 Hadoop에 대한 푸시 컴퓨팅은 PolyBase 쿼리에 대해 비활성화됩니다.If the Resource Manager isn't specified, pushing compute to Hadoop is disabled for PolyBase queries.

포트를 지정하지 않을 경우 기본값은 'hadoop 연결' 구성에 대한 현재 설정을 사용하여 선택됩니다.If the port isn't specified, the default value is chosen 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 supported Hadoop versions, see PolyBase Connectivity Configuration (Transact-SQL).

중요

외부 데이터 원본을 만들 때 RESOURCE_MANAGER_LOCATION 값의 유효성이 검사되지 않습니다.The RESOURCE_MANAGER_LOCATION value is not validated when you create the external data source. 잘못된 값을 입력하면 제공된 값을 확인할 수 없으므로 푸시 다운을 시도할 때마다 실행 시 쿼리 오류가 발생할 수 있습니다.Entering an incorrect value may cause query failure at execution time whenever push-down is attempted as the provided value would not be able to resolve.

푸시 다운이 활성화된 Hadoop을 참조하는 외부 데이터 원본 만들기는 구체적인 예제와 추가 지침을 제공합니다.Create external data source to reference Hadoop with push-down enabled provides a concrete example and further guidance.

사용 권한Permissions

Analytics Platform System(병렬 데이터 웨어하우스 또는 PDW)의 데이터베이스에 대한 CONTROL 권한이 필요합니다.Requires CONTROL permission on database in Analytics Platform System (Parallel Data Warehouse or PDW).

참고

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

잠금Locking

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

보안Security

PolyBase는 대부분의 외부 데이터 원본에 대해 프록시 기반 인증을 지원합니다.PolyBase supports proxy based authentication for most external data sources. 데이터베이스 범위 자격 증명을 생성하여 프록시 계정을 만듭니다.Create a database scoped credential to create the proxy account.

현재 HADOOP 유형의 SAS 토큰이 지원되지 않습니다.Currently a SAS token with type HADOOP is unsupported. 스토리지 계정 액세스 키에서만 지원됩니다.It's only supported with a storage account access key. HADOOP 유형 및 SAS 자격 증명으로 외부 데이터 원본을 만들려고 하면 다음 오류로 인해 실패합니다.Attempting to create an external data source with type HADOOP and a SAS credential fails with the following error:

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.'

예:Examples:

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

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

RESOURCE_MANAGER_LOCATION 옵션을 지정하여 PolyBase 쿼리에 대한 Hadoop 계산 푸시 다운을 활성화합니다.Specify the RESOURCE_MANAGER_LOCATION option to enable push-down computation to Hadoop for PolyBase queries. 활성화되면 PolyBase는 쿼리 계산을 Hadoop에 푸시해야 하는지 여부를 결정하기 위해 비용 기반 결정을 내립니다.Once enabled, PolyBase makes a cost-based decision to determine whether the query computation should be pushed to 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.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
(    LOCATION                  = 'hdfs://10.10.10.10:8050'
,    CREDENTIAL                = HadoopUser1
,    TYPE                      = HADOOP
,    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
)
;

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

이 예제에서 외부 데이터 원본은 logs라는 Azure Storage 계정 아래의 daily라는 Azure Blob Storage 컨테이너입니다.In this example, the external data source is an Azure blob storage container called daily under Azure storage account named logs. Azure 스토리지 외부 데이터 원본은 데이터 전송 전용입니다.The Azure storage external data source is for data transfer only. 조건자 푸시 다운을 지원하지 않습니다.It doesn't support predicate push-down.

이 예제에서는 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. Azure 스토리지에 대한 인증 중에는 사용되지 않으므로 데이터베이스 범위 지정 자격 증명 ID에 문자열을 지정할 수 있습니다.You can specify any string in database scoped credential identity as it isn't used during authentication to Azure storage.

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

참고 항목See Also