你当前正在访问 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 帐户(或组)授予对源帐户的访问权限。 要授予适当的权限,请执行以下步骤:
- 在 Azure 门户中找到你的存储帐户。
- 选择“数据存储”- >“容器”,然后导航到外部表需要访问的源数据所在的文件夹。
- 选择“访问控制(IAM)”。
- 选择“添加”->“添加角色分配”。
- 在工作职能角色列表中,选择“存储 Blob 数据读者”,然后选择“下一步”。 如果需要写入权限,请选择“存储 Blob 数据参与者”。
- 在“添加角色分配”页上,选择“+ 选择成员”。 此时会在右侧角落里打开“选择成员”窗格。
- 键入所需的 Microsoft Entra ID 帐户的名称。 显示时,选取所需的帐户并选择“选择”。
- 在“添加角色分配”页中,确保“成员”列表包含所需的 Microsoft Entra ID 帐户。 验证后,选择“查看 + 分配”。
- 在确认页中,查看更改,然后选择“查看 + 分配”。
现在,该 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 上的数据的外部表。
创建所需的数据库对象
外部表需要创建以下对象:
- 指向源文件夹的外部数据源
- 用于定义源文件格式的外部文件格式
- 用于查询的外部表定义
要执行这些步骤,需要使用 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_TERMINATOR
、STRING_DELIMITER
、FIRST_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>
);
其中:
<ExternalTableName>
是要用于外部表的名称。<Path>
是源数据的路径(相对于外部数据源中指定的位置)。<ExternalDataSourceName>
是已创建的外部数据源的名称。<FileFormatName>
是已创建的外部文件格式的名称。
请务必将表名称和架构调整为所需名称和源文件中数据的架构。
查询外部表
此时,将创建访问外部表所需的所有元数据。 要测试外部表,请使用以下 T-SQL 示例等查询来验证工作:
SELECT TOP 10 Col1, Col2 FROM <ExternalTableName>;
如果已正确配置所有内容,应会在此查询的结果中看到来自源数据的数据。
有关 CREATE EXTERNAL TABLE
的详细信息,请参阅 CREATE EXTERNAL TABLE (Transact-SQL)。