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