你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:使用 Microsoft Entra ID 加载外部数据

本文介绍如何使用 Microsoft Entra ID 直通创建外部表。

先决条件

完成本教程需要使用以下资源:

  • Azure Synapse Analytics 工作区和专用 SQL 池

向 Microsoft Entra ID 帐户授予对存储帐户的访问权限

此示例使用 Microsoft Entra ID 帐户(或组)对源数据进行身份验证。

要启用对 Azure Data Lake Storage (ADLS) Gen2 帐户上的数据的访问,需要向你的 Microsoft Entra ID 帐户(或组)授予对源帐户的访问权限。 要授予适当的权限,请执行以下步骤:

  1. 在 Azure 门户中找到你的存储帐户。
  2. 选择“数据存储”- >“容器”,然后导航到外部表需要访问的源数据所在的文件夹。
  3. 选择“访问控制(IAM)”。
  4. 选择“添加”->“添加角色分配”
  5. 在工作职能角色列表中,选择“存储 Blob 数据读者”,然后选择“下一步”。 如果需要写入权限,请选择“存储 Blob 数据参与者”。
  6. 在“添加角色分配”页上,选择“+ 选择成员”。 此时会在右侧角落里打开“选择成员”窗格。
  7. 键入所需的 Microsoft Entra ID 帐户的名称。 显示时,选取所需的帐户并选择“选择”。
  8. 在“添加角色分配”页中,确保“成员”列表包含所需的 Microsoft Entra ID 帐户。 验证后,选择“查看 + 分配”
  9. 在确认页中,查看更改,然后选择“查看 + 分配”

现在,该 Microsoft Entra ID 帐户或组是存储 Blob 数据读者角色的成员,并且有权访问源文件夹。

使用 COPY INTO 引入数据

利用 COPY INTO T-SQL 语句,可以对表进行灵活的高吞吐量数据引入,它是将数据引入专用 SQL 池表的主要策略。 它支持用户从外部位置引入数据,而无需创建外部表所需的任何额外的数据库对象。

COPY INTO 语句使用 CREDENTIAL 参数来指定用于连接到源帐户的身份验证方法。 但在使用 Microsoft Entra ID 或公共存储帐户进行身份验证时,无需指定 CREDENTIAL。 若要使用 Entra ID 身份验证运行 COPY INTO 语句,请使用以下 T-SQL 命令:

COPY INTO <TableName>
FROM 'https://<AccountName>.dfs.core.windows.net/<Container>/<Folder>/ '
WITH
(
    [<CopyIntoOptions>]
);

其中:

  • <TableName> 是要将数据引入到其中的表的名称。
  • <AccountName> 是你的 ADLS Gen2 帐户名称。
  • <Container> 是存储源数据的存储帐户中容器的名称
  • <Folder> 是容器中存储源数据的文件夹(或带有子文件夹的路径)。 如果直接指向单个文件,则还可以提供文件名。
  • <CopyIntoOptions> 是要提供给 COPY INTO 语句的任何其他选项的列表。

要了解详细信息并探索完整语法,请参阅 COPY INTO (Transact-SQL)

使用外部表查询 ADLS Gen2 上的数据

外部表支持用户查询 Azure Data Lake Storage (ADLS) Gen2 帐户中的数据,而无需先引入数据。 用户可以创建指向 ADLS Gen2 容器上的文件的外部表,并像常规用户表一样对其进行查询。

以下步骤介绍了如何使用 Entra ID 身份验证以新建指向 ADLS Gen2 上的数据的外部表。

创建所需的数据库对象

外部表需要创建以下对象:

  1. 指向源文件夹的外部数据源
  2. 用于定义源文件格式的外部文件格式
  3. 用于查询的外部表定义

要执行这些步骤,需要使用 Azure Synapse 工作区中的 SQL 编辑器或使用连接到专用 SQL 池的首选 SQL 客户端。 我们来详细了解一下这些步骤。

创建外部数据源

下一步是创建一个外部数据源,以指定外部表所使用的源数据驻留的位置。

要创建外部数据源,请使用以下 T-SQL 命令:

CREATE EXTERNAL DATA SOURCE <ExternalDataSourceName>
WITH (
    TYPE = HADOOP,
    LOCATION = 'abfss://<Container>@<AccountName>.dfs.core.windows.net/<Folder>/'
);

其中:

  • <ExternalDataSourceName> 是要用于外部数据源的名称。
  • <AccountName> 是你的 ADLS Gen2 帐户名称。
  • <Container> 是存储源数据的存储帐户中容器的名称。
  • <Folder> 是容器中存储源数据的文件夹(或带有子文件夹的路径)。

要详细了解外部数据源,请参阅 CREATE EXTERNAL DATA SOURCE (Transact-SQL)

创建外部文件格式

下一步是创建外部文件格式。 它指定外部表引用的数据的实际布局。

要创建外部文件格式,请使用以下 T-SQL 命令。 将 <FileFormatName> 替换为要用于外部文件格式的名称。

CREATE EXTERNAL FILE FORMAT <FileFormatName>
WITH (
    FORMAT_TYPE = DELIMITEDTEXT,
    FORMAT_OPTIONS (
        FIELD_TERMINATOR = ',',
        STRING_DELIMITER = '"',
        FIRST_ROW = 2,
        USE_TYPE_DEFAULT = True
    )
);

在此示例中,请根据源数据按需调整 FIELD_TERMINATORSTRING_DELIMITERFIRST_ROW 和其他参数。 要获取更多格式设置选项并了解详细信息,请参阅 CREATE EXTERNAL FILE FORMAT (Transact-SQL)

创建外部表

创建用于保存元数据以安全访问外部数据所需的对象后,即可创建外部表。 要创建外部表,请使用以下 T-SQL 命令:

-- Adjust the table name and columns to your desired name and external table schema
CREATE EXTERNAL TABLE <ExternalTableName> (
    Col1 INT,
    Col2 NVARCHAR(100),
    Col4 INT
)
WITH
(
    LOCATION = '<Path>',
    DATA_SOURCE = <ExternalDataSourceName>,
    FILE_FORMAT = <FileFormatName>
);

其中:

请务必将表名称和架构调整为所需名称和源文件中数据的架构。

查询外部表

此时,将创建访问外部表所需的所有元数据。 要测试外部表,请使用以下 T-SQL 示例等查询来验证工作:

SELECT TOP 10 Col1, Col2 FROM <ExternalTableName>;

如果已正确配置所有内容,应会在此查询的结果中看到来自源数据的数据。

有关 CREATE EXTERNAL TABLE 的详细信息,请参阅 CREATE EXTERNAL TABLE (Transact-SQL)