ALTER EXTERNAL DATA SOURCE (Transact-SQL)

適用対象: SQL Server 2016 (13.x) 以降 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

外部テーブルを作成するために使用する外部データ ソースを変更します。 外部データ ソースとして使用できるのは、SQL Server の場合は Hadoop または Azure Blob Storage (WASBS)、Azure Synapse Analytics の場合は Azure Blob Storage (WASBS) または Azure Data Lake storage (ABFSS/ADL) です。

SQL Server 2022 (16.x) 以降、Hadoop 外部データ ソースはサポートされなくなります。 また、Azure Blob Storage と Azure Data Lake Gen 2 のプレフィックスが変更されました。次の表を参照してください。

外部データ ソース ソース 終了
Azure Blob Storage wasb[s] abs
ADLS Gen2 abfs[s] adls

構文

-- Modify an external data source
-- Applies to: SQL Server (2016, 2017 and 2019) and APS
ALTER EXTERNAL DATA SOURCE data_source_name SET
    {   
        LOCATION = '<prefix>://<path>[:<port>]' [,] |
        RESOURCE_MANAGER_LOCATION = <'IP address;Port'> [,] |
        CREDENTIAL = credential_name
    }  
    [;]  

-- Modify an external data source pointing to Azure Blob storage
-- Applies to: SQL Server (2017 and 2019)
ALTER EXTERNAL DATA SOURCE data_source_name
    SET
        LOCATION = 'https://storage_account_name.blob.core.windows.net'
        [, CREDENTIAL = credential_name ] 

-- Modify an external data source pointing to Azure Blob storage
-- Applies to: SQL Server 2022
ALTER EXTERNAL DATA SOURCE data_source_name
    SET
        LOCATION = 'abs://storage_account_name.blob.core.windows.net'
        [, CREDENTIAL = credential_name ] 

-- Modify an external data source pointing to Azure Data Lake Storage Gen2
-- Applies to: SQL Server 2022
ALTER EXTERNAL DATA SOURCE data_source_name
    SET
        LOCATION = 'adls://storage_account_name.dfs.core.windows.net'
        [, CREDENTIAL = credential_name ] 

-- Modify an external data source pointing to Azure Blob storage or Azure Data Lake storage
-- Applies to: Azure Synapse Analytics dedicated SQL pool only
ALTER EXTERNAL DATA SOURCE data_source_name
    SET
        [LOCATION = '<location prefix>://<location path>']
        [, CREDENTIAL = credential_name ] 

引数

data_source_name: データ ソースのユーザー定義の名前を指定します。 名前は一意である必要があります。

LOCATION = '<prefix>://<path>[:<port>]' 外部データ ソースへの接続プロトコル、パス、ポートを指定します。 有効な場所のオプションについては、「CREATE EXTERNAL DATA SOURCE (Transact-SQL)」を参照してください。

RESOURCE_MANAGER_LOCATION = '<IP address;Port>' (Azure Synapse Analytics および SQL Server 2022 (16.x) には適用されません) Hadoop リソース マネージャーの場所を指定します。 指定した場合、クエリ オプティマイザーは Hadoop の計算の機能を使用して、PolyBase クエリのデータを事前処理こともできます。 これは、コストベースの判断です。 述語のプッシュダウンが呼び出されると、この Hadoop と SQL の間で転送されるデータ量が大幅に減少し、クエリのパフォーマンスが向上します。

CREDENTIAL = Credential_Name: 名前付きの資格情報を指定します。 「CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)」を参照してください。

TYPE = [HADOOP | BLOB_STORAGE] 適用対象: SQL Server 2017 (14.x) および SQL Server 2019 (15.x)。 一括操作の場合のみ、LOCATION は Azure BLOB ストレージの有効な URL にする必要があります。 LOCATION URL の末尾に、/、ファイル名、または Shared Access Signature パラメーターを配置しないでください。 使用する資格情報は、SHARED ACCESS SIGNATURE を使用して ID として作成する必要があります。 Shared Access Signature に関する詳細については、「Shared Access Signature (SAS) を使用」を参照してください。

解説

一度に変更できるソースは 1 つだけです。 同じソースを変更する複数の要求が同時に発生すると、1 つのステートメントが待機状態になります。 ただし、さまざまなソースを同時に変更できます。 このステートメントは、他のステートメントと同時実行できます。

Azure Synapse Analytics では、Azure BLOB ストレージや Azure Data Lake ストレージをポイントする外部データ ソースへの接続は、専用 SQL プールでのみサポートされています。

アクセス許可

ALTER ANY EXTERNAL DATA SOURCE 権限が必須です。

重要

ALTER ANY EXTERNAL DATA SOURCE 権限は、あらゆる外部データ ソース オブジェクトを作成し、変更する能力をプリンシパルに与えます。そのため、データベース上のすべてのデータベース スコープ資格情報にアクセスする能力も与えます。 この権限は特権として考える必要があります。したがって、システム内の信頼できるプリンシパルにのみ与える必要があります。

次の例では、既存のデータ ソースの場所と Resource Manager の場所を変更します。 SQL Server 2022 (16.x) には適用されません。

ALTER EXTERNAL DATA SOURCE hadoop_eds SET
     LOCATION = 'hdfs://10.10.10.10:8020',
     RESOURCE_MANAGER_LOCATION = '10.10.10.10:8032'
    ;

次の例では、既存のデータ ソースに接続できるように資格情報を変更します。

ALTER EXTERNAL DATA SOURCE hadoop_eds SET
   CREDENTIAL = new_hadoop_user
    ;

次の例では、資格情報を新しい LOCATION に変更します。 この例は、Azure Synapse Analytics に対して作成される外部データ ソースです。

ALTER EXTERNAL DATA SOURCE AzureStorage_west SET
   LOCATION = 'wasbs://loadingdemodataset@updatedproductioncontainer.blob.core.windows.net',
   CREDENTIAL = AzureStorageCredential