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

適用対象: ○SQL Server (2016 以降) ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel 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、および Parallel 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 のシナリオでは、外部データ ソースは、Hadoop ファイル システム (HDFS)、Azure Storage Blob コンテナー、または 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 クエリのシナリオでは、外部のソースは Shard Map Manager (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 の外部データ ソースでは、PolyBase の Azure Blob Storage とは異なり、BULK INSERTOPENROWSET の構文がサポートされます。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: Azure Data Lake Store Gen 2
-- (on Azure SQL Data Warehouse)
CREATE EXTERNAL DATA SOURCE ABFS 
WITH
(
              TYPE=HADOOP,
              LOCATION='abfs://<container>@<AzureDataLake account_name>.dfs.core.windows.net',
              CREDENTIAL=ABFS_Credemt
);
GO


-- 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]'
        [, RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:port]' ]
        [, CREDENTIAL = credential_name]
    )
[;]

-- PolyBase only: Azure Storage Blob as data source   
-- (on Parallel Data Warehouse)  
CREATE EXTERNAL DATA SOURCE data_source_name  
    WITH (   
        TYPE = HADOOP,  
        LOCATION = 'wasb[s]://container@account_name.blob.core.windows.net'
        [, CREDENTIAL = credential_name ]
    )  
[;]
  
-- 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 Databas、および Azure SQL Data Warehouse のデータベース内で一意にする必要があります。The name must be unique within the database in SQL Server, Azure SQL Database, and Azure SQL Data Warehouse. 名前は、Parallel 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 または Hadoop 用 Azure Storage Blob である場合は、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 クラスターの Uniform Resource Indicator (URI) を指定します。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.
port: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'. LOCATION は、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 ストレージ アカウントの完全修飾ドメイン名 (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 の場合、LOCATION は、お使いの 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 SQL Database または Azure 仮想マシン上の SQL Server データベースで Shard Map Manager をホストする SQL Database サーバー名を指定します。For SHARD_MAP_MANAGER, specifies the SQL Database 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 でリモート データベースの SQL Database サーバーの名前を指定します。For RDBMS, specifies the SQL Database 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 にする必要があります。This type is used for bulk operations only, LOCATION must be valid the URL to Azure Blob storage and container. LOCATION URL の末尾に、/、ファイル名、または Shared Access Signature パラメーターを配置しないでください。Do not put /, file name, or shared access signature parameters at the end of the LOCATION URL. CREDENTIAL は、BLOB オブジェクトがパブリックでない場合に必須です。CREDENTIAL is required if the blob object is not public. 例:For example:

CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH (  TYPE = BLOB_STORAGE, 
        LOCATION = 'https://****************.blob.core.windows.net/invoices', 
        CREDENTIAL= MyAzureBlobStorageCredential    --> CREDENTIAL is not required if a blob has public access!
);

使用される資格情報は、SHARED ACCESS SIGNATURE を ID として使用して作成する必要があり、SASS トークンの先頭に ? があってはなりません。また、読み込む必要のあるファイル (たとえば srt=o&sp=r) に対して少なくとも読み取りアクセス許可が必要で、有効期限が有効である必要があります (すべての日付が UTC 時刻です)。The credential used, must be created using SHARED ACCESS SIGNATURE as the identity, should not have the leading ? in 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). 例:For example:

CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential 
 WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
 SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z***************';

Shared Access Signature に関する詳細については、「Shared Access Signature (SAS) を使用」を参照してください。For more information on shared access signatures, see Using Shared Access Signatures (SAS). Blob ストレージへのアクセスの例については、例 F の「BULK INSERT」を参照してください。For an example of accessing blob storage, see example F of BULK INSERT.

注意

Azure Blob Storage から SQL DW または Parallel Data Warehouse に読み込むには、シークレットが Azure Storage キーである必要があります。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. 指定した場合、クエリ オプティマイザーは Hadoop の計算の機能と MapReduce を使用して、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 connectivity' 構成の現在の設定を使用して、既定値が決まります。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:

  • Windows 上の Hortonworks HDP 2.0、2.1、2.2、Hortonworks HDP 2.0, 2.1, 2.2. 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 ストレージの外部データ ソースの作成を参照してください。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 (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 を使用するには、次の 3 つのオブジェクトを作成する必要があります。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.

アクセス許可Permissions

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 の以前のリリースでは、CREATE EXTERNAL DATA SOURCE には、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. つまり、2 つの外部データ ソースで同じ 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. これは Parallel Data Warehouse のサーバー スコープです。It is server-scoped in Parallel Data Warehouse.

PolyBase の場合、RESOURCE_MANAGER_LOCATION または JOB_TRACKER_LOCATION が定義されると、クエリ オプティマイザーは、外部の Hadoop ソース上で Map Reduce ジョブを開始して、計算をプッシュダウンすることで、各クエリの最適化を検討します。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 フェールオーバーが発生した場合に 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.

現時点では、種類が hadoop の SAS トークンがサポートされ、ストレージ アカウントのアクセス キーの使用のみがサポートされています。Currently an SAS token with type hadoop is unsupported, and it is only supported with a Storage account access key. 種類が hadoop の外部データ ソースを SAS 資格情報を使用して作成しようとすると、次のエラーで失敗します。Attempting to create an external data source with type hadoop and using a SAS credential might fail with the 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.'

ロックLocking

EXTERNAL DATA SOURCE オブジェクトを共有ロックします。Takes a shared lock on the EXTERNAL DATA SOURCE object.

例:SQL Server 2016Examples: SQL Server 2016

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

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

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

D.D. Azure Blob Storage を参照する外部データ ソースを作成するCreate external data source to reference Azure blob storage

お使いの Azure Blob Storage コンテナーを参照する外部データ ソースを作成するには、Azure Blob Storage URI と、ご自分の Azure ストレージ アカウント キーを含むデータベース スコープの資格情報を指定します。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 ストレージ アカウントの下の 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 ストレージの外部データ ソースはデータ転送のみで、述語のプッシュダウンはサポートされません。The Azure storage external data source is for data transfer only; and it does not support predicate pushdown.

この例では、Azure ストレージへの認証用にデータベース スコープ資格情報を作成する方法を示します。This example shows how to create the database scoped credential for authentication to Azure storage. データベースの資格情報シークレットに、Azure ストレージ アカウント キーを指定します。Specify the Azure storage account key in the database credential secret. Azure ストレージへの認証に使用しない、データベース スコープ資格情報 ID のすべての文字列を指定します。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 データベースExamples: Azure SQL Database

E.E. Shard Map Manager の外部データ ソースを作成するCreate a Shard map manager external data source

SHARD_MAP_MANAGER を参照する外部データ ソースを作成するには、Azure SQL Database または Azure 仮想マシン上の SQL Server データベースで Shard Map Manager をホストする 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 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'
);

F.F. RDBMS の外部データ ソースを作成するCreate an RDBMS external data source

RDBMS を参照する外部データ ソースを作成するには、Azure SQL Database でリモート データベースの SQL Database サーバー名を指定します。To create an external data source to reference a RDBMS, specifies the SQL Database 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

G.G. Azure Data Lake Store を参照する外部データ ソースを作成するCreate external data source to reference Azure Data Lake Store

Azure Data Lake Store の接続は、お使いの ADLS URI と Azure Active Directory アプリケーションのサービス プリンシパルに基づいています。Azure Data lake Store connectivity is based on your ADLS URI and your Azure Active directory Application's service principle. このアプリケーションの作成に関するドキュメントは、「Data Lake Store での Azure Active Directory を使用したサービス間認証」で見つかります。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>'
)

例 :Parallel Data WarehouseExamples: Parallel Data Warehouse

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

I.I. Azure Blob Storage を参照する外部データ ソースを作成するCreate external data source to reference Azure blob storage

お使いの Azure Blob Storage コンテナーを参照するための外部データ ソースを作成するには、Azure Blob Storage URI を外部データ ソースの 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 ストレージ アカウント キーを認証用の PDW core-site.xml ファイルに追加します。Add your Azure storage account key to PDW core-site.xml file for authentication.

この例では、外部データ ソースは、myaccount という Azure ストレージ アカウントの下の 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 ストレージの外部データ ソースはデータ転送のみで、述語のプッシュダウンはサポートされません。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

J.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 として使用して作成する必要があり、SASS トークンの先頭に ? があってはなりません。また、読み込む必要のあるファイル (たとえば srt=o&sp=r) に対して少なくとも読み取りアクセス許可が必要で、有効期限が有効である必要があります (すべての日付が UTC 時刻です)。The credential used, must be created using SHARED ACCESS SIGNATURE as the identity, should not have the leading ? in 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). Shared Access Signature に関する詳細については、「Shared Access Signature (SAS) を使用」を参照してください。For more information on shared access signatures, see Using Shared Access Signatures (SAS).

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices 
 WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
 SECRET = '(REMOVE ? FROM THE BEGINNING)******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z***************';

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)