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 Storage (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>]':提供外部数据源的连接协议、路径和端口。 若要了解有效的位置选项,请参阅创建外部数据源 (Transact-SQL)

RESOURCE_MANAGER_LOCATION = '<IP address;Port>'(不适用于 Azure Synapse Analytics 和 SQL Server 2022 (16.x))指定 Hadoop 资源管理器位置。 如果指定,查询优化器可以选择通过使用 Hadoop 的计算功能预处理 PolyBase 查询的数据。 这是基于开销的决策。 这称为谓词下推,可以显著减少 Hadoop 和 SQL之间传输的数据量,并因此提高查询性能。

CREDENTIAL = Credential_Name 指定命名凭据。 请参阅创建数据库作用于凭据 (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
    ;

以下示例将凭证更改为新位置。 此示例是为 Azure Synapse Analytics 创建的外部数据源。

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