ALTER EXTERNAL DATA SOURCE (Transact-SQL)

適用於: SQL Server 2016 (13.x)及更新版本 Azure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

修改用來建立外部資料表的外部資料來源。 外部資料源可以是適用於 SQL SERVER 的 Hadoop 或 Azure Blob 儲存體 (WASBS),以及適用於 Azure Synapse Analytics 的 Azure Blob 儲存體 (WASBS) 或 Azure Data Lake 儲存體 (ABFSS/ADL)。

從 SQL Server 2022 (16.x) 開始,不再支援 Hadoop 外部資料來源。 此外,Azure Blob 儲存體和 Azure Data Lake Gen 2 前置詞已變更,請參閱下表:

外部資料來源 寄件者 收件者
Azure Blob 儲存體 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 Resource Manager 位置。 指定時,查詢最佳化工具可能會使用 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 做為身分識別來建立您所使用的認證。 如需共用存取簽章的詳細資訊,請參閱使用共用存取簽章 (SAS)

備註

每次只能修改單一來源。 修改相同來源的同時要求會導致一個陳述式進入等待。 不過,可同時修改不同的來源。 這個陳述式可以與其他陳述式同時執行。

在 Azure Synapse Analytics 中,只有專用 SQL 集區才支援指向 Azure Blob 儲存體或 Azure Data Lake 儲存體的外部資料來源連線。

權限

要求 ALTER ANY EXTERNAL DATA SOURCE 權限。

重要

ALTER ANY EXTERNAL DATA SOURCE 權限可授與任何主體建立及修改任何外部資料來源物件的能力,因此也能讓主體存取資料庫上的所有資料庫範圍認證。 必須將此權限視為具高度權限,因此必須僅授與系統中受信任的主體。

範例

下列範例會改變現有資料來源的位置和資源管理員位置。 不適用於 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