在 SQL 池中使用 Delta Lake

已完成

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

注意

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

使用 OPENROWSET 查询增量格式化文件

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