ALTER EXTERNAL DATA SOURCE (Transact-SQL)

适用于:sql Server 2016 (13.x) 及更高版本 Azure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics Endpoint inMicrosoft Fabric Warehouse inMicrosoft Fabric SQL database in Microsoft Fabric 中的 Fabric SQL 数据库

修改用于创建外部表的外部数据源,用于 PolyBase 和数据虚拟化功能。 外部数据源可以是适用于 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 Storage wasb[s] abs
ADLS Gen2 abfs[s] adls

Transact-SQL 语法约定

语法

修改外部数据源。 SQL Server(2016、2017 和 2019)和分析平台系统的语法(PDW)。

-- 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
    }  
    [;]  

修改指向 Azure Blob 存储的外部数据源。 SQL Server 的语法(2017 和 2019)。

-- 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 ] 

修改指向 Azure Blob 存储的外部数据源。 SQL Server 2022 及更高版本的语法。

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

修改指向 Azure Data Lake Storage (ADLS) Gen2 的外部数据源。 SQL Server 2022 及更高版本的语法。

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

修改指向 Azure Blob 存储或 Azure Data Lake Storage 的外部数据源。 仅限 Azure Synapse Analytics 专用 SQL 池的语法。

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

指定数据源的用户定义名称。 该名称必须是唯一的。

位置

提供外部数据源的连接协议、路径和端口。 若要了解有效的位置选项,请参阅创建外部数据源 (Transact-SQL)

RESOURCE_MANAGER_LOCATION = '<IP 地址;端口>'

不适用于 Azure Synapse Analytics 和 SQL Server 2022 (16.x)

指定 Hadoop 资源管理器位置。 如果指定,查询优化器可以选择通过使用 Hadoop 的计算功能预处理 PolyBase 查询的数据。 这是基于开销的决策。 这称为谓词下推,可以显著减少 Hadoop 和 SQL之间传输的数据量,并因此提高查询性能。

资格 = Credential_Name

指定命名凭据。 请参阅创建数据库作用于凭据 (Transact-SQL)

TYPE = [ HADOOP |BLOB_STORAGE ] **

适用于: 仅限 SQL Server 2017 (14.x) 和 SQL Server 2019 (15.x)。

仅对于大容量操作,LOCATION 必须是有效的 Azure Blob 存储 URL。 不要在 / URL 末尾放置文件名LOCATION或共享访问签名参数。

必须使用 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