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

SQL Server、SQL Database、SQL Data Warehouse、または Analytics Platform System (Parallel Data Warehouse つまり 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. この Web ページでは、クリックした製品に合わせて、異なるコンテンツが表示されます。The click displays different content here on this webpage, appropriate for whichever product you click.

* SQL Server *  * SQL Server *   SQL DatabaseSQL 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.defaultFS 構成パラメーターを使用してポートを見つけることができます。In Hadoop, the port can be found using the fs.defaultFS 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 サービスがある場合に使用されます。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.
  • Driver={<Name of Driver>} 経由で接続する際に ODBC を指定します。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 のフェールオーバー時に、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.

外部データ ソース レベルで SQL Server、Oracle、Teradata、MongoDB、または ODBC に接続するときに PUSHDOWN がサポートされます。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 の場合、SHARED ACCESS SIGNATURE を ID として使用して、資格情報を作成する必要があります。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.

Resource Manager を指定しない場合、Hadoop への計算のプッシュが、PolyBase クエリに対して無効になります。If the Resource Manager isn't specified, pushing compute to Hadoop is disabled for PolyBase queries.

ポートが指定されていない場合、'hadoop connectivity' 構成の現在の設定を使用して、既定値が選択されます。If the port isn't specified, the default value is chosen using the current setting for 'hadoop connectivity' configuration.

Hadoop ConnectivityHadoop 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.

SecuritySecurity

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+)

A.A. SQL 2019 で Oracle を参照する外部データ ソースを作成する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

B.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 ストレージ アカウントの下の 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 ストレージへの認証用にデータベース スコープ資格情報を作成する方法を示します。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 には任意の文字列を指定できます。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 の末尾に、 / 、ファイル名、または Shared Access Signature パラメーターを配置しないでください。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 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 として設定する必要があり、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). 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'
--   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 Database (SQL DB) のデータベース内で一意になる必要があります。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 キーを使用します。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 の場合、SHARED ACCESS SIGNATURE を ID として使用して、資格情報を作成する必要があります。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
RDBMS (RDBMS)RDBMS 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 の外部データ ソースを作成する方法を示す例については、「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:

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

SHARD_MAP_MANAGER を参照する外部データ ソースを作成するには、SQL Database または仮想マシン上の 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 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).

B.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 の末尾に、 / 、ファイル名、または Shared Access Signature パラメーターを配置しないでください。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 Storage からデータを取得する一括操作用の外部データ ソースを作成する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). 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'
--   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 DatabaseSQL Database * SQL Data
Warehouse *
 
* SQL Data
Warehouse *
 
Analytics Platform
System (PDW)
Analytics Platform
System (PDW)

 

概要:Azure SQL Data WarehouseOverview: 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
)
[;]

引数Arguments

data_source_namedata_source_name

データ ソースのユーザー定義の名前を指定します。Specifies the user-defined name for the data source. この名前は、SQL Data Warehouse (SQL DW) のデータベース内で一意になる必要があります。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 Gen 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 または Azure Data Lake Store (ADLS) Gen 2 から SQL DW にデータを読み込むには、Azure Storage キーを使用します。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 = HADOOPTYPE = HADOOP

構成されている外部データ ソースの種類を指定します。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.

SecuritySecurity

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:

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

この例では、外部データ ソースは、logs という Azure ストレージ アカウントの下の 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 ストレージへの認証用にデータベース スコープ資格情報を作成する方法を示します。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 には任意の文字列を指定できます。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
)
;

B.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 を使用したデータ レイク ストアの認証][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
)
[;]

D.D. Azure Data Lake Store Gen 2 への Polybase 接続を参照する外部データ ソースを作成するCreate external data source to reference Polybase connectivity to Azure Data Lake Store Gen 2

マネージド ID メカニズムで Azure Data Lake Store Gen2 アカウントに接続するとき、SECRET を指定する必要はありません。There is no need to specify SECRET when connecting to Azure Data Lake Store Gen2 account with Managed Identity mechanism.

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

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

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

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

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

参照See Also

SQL ServerSQL Server SQL DatabaseSQL 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 (Parallel Data Warehouse つまり 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.defaultFS 構成パラメーターを使用してポートを見つけることができます。In Hadoop, the port can be found using the fs.defaultFS 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 のフェールオーバー時に、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 Storage または Azure Data Lake Store (ADLS) Gen 2 から、SQL DW または PDW にデータを読み込むには、Azure Storage キーを使用します。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.

Resource Manager を指定しない場合、Hadoop への計算のプッシュが、PolyBase クエリに対して無効になります。If the Resource Manager isn't specified, pushing compute to Hadoop is disabled for PolyBase queries.

ポートが指定されていない場合、'hadoop connectivity' 構成の現在の設定を使用して、既定値が選択されます。If the port isn't specified, the default value is chosen using the current setting for 'hadoop connectivity' configuration.

Hadoop ConnectivityHadoop 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 (Parallel Data Warehouse つまり PDW) のデータベースに対する CONTROL 権限が必要です。Requires CONTROL permission on database in Analytics Platform System (Parallel Data Warehouse or PDW).

注意

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.

ロックLocking

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

SecuritySecurity

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:

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

B.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 ストレージ アカウントの下の 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 ストレージへの認証用にデータベース スコープ資格情報を作成する方法を示します。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 には任意の文字列を指定できます。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