在 SQL 池中使用 Delta Lake

已完成

Delta Lake 设计为 Apache Spark 的事务性关系存储层;包括 Azure Synapse Analytics 中的 Spark 池。 但是,Azure Synapse Analytics 还包括一个无服务器 SQL 池运行时,使数据分析师和工程师能够针对数据湖或关系数据库中的数据运行 SQL 查询。

注释

只能 从无服务器 SQL 池中的 Delta Lake 表查询 数据;无法 更新插入删除 数据。

使用 OPENROWSET 查询 Delta 格式化文件

Azure Synapse Analytics 中的无服务器 SQL 池包括对读取增量格式化文件的支持;使你能够使用 SQL 池查询 Delta Lake 表。 在想要使用 Spark 和 Delta 表处理大量数据的情况下,此方法非常有用,但使用 SQL 池运行查询来报告和分析已处理的数据。

在以下示例中,SQL SELECT 查询使用 OPENROWSET 函数读取增量格式数据。

SELECT *
FROM
    OPENROWSET(
        BULK 'https://mystore.dfs.core.windows.net/files/delta/mytable/',
        FORMAT = 'DELTA'
    ) AS deltadata

可以在无服务器 SQL 池中运行此查询,以从存储在指定文件位置的 Delta Lake 表检索最新数据。

您还可以创建一个数据库,并添加一个数据源来封装您的 Delta Lake 数据文件的位置,如下例所示:

CREATE DATABASE MyDB
      COLLATE Latin1_General_100_BIN2_UTF8;
GO;

USE MyDB;
GO

CREATE EXTERNAL DATA SOURCE DeltaLakeStore
WITH
(
    LOCATION = 'https://mystore.dfs.core.windows.net/files/delta/'
);
GO

SELECT TOP 10 *
FROM OPENROWSET(
        BULK 'mytable',
        DATA_SOURCE = 'DeltaLakeStore',
        FORMAT = 'DELTA'
    ) as deltadata;

注释

使用以 Parquet 格式存储的 Delta Lake 数据时,通常最好使用基于 UTF-8 的排序规则创建数据库,以确保字符串兼容性。

查询目录表

Azure Synapse Analytics 中的无服务器 SQL 池对 Spark 元存储中的数据库具有共享访问权限,因此可以查询使用 Spark SQL 创建的目录表。 在以下示例中,无服务器 SQL 池中的 SQL 查询查询包含 Delta Lake 数据的目录表:

-- By default, Spark catalog tables are created in a database named "default"
-- If you created another database using Spark SQL, you can use it here
USE default;

SELECT * FROM MyDeltaTable;

小提示

有关使用无服务器 SQL 池访问 Delta 表的详细信息,请参阅 Azure Synapse Analytics 文档中的 使用 Azure Synapse Analytics 中的无服务器 SQL 池查询 Delta Lake 文件