读取 Delta Lake 表(Synapse 或外部位置)

重要

AKS 上的 Azure HDInsight 已于 2025 年 1 月 31 日停用。 了解更多 ,请参阅此公告

需要将工作负荷迁移到 Microsoft Fabric 或等效的 Azure 产品,以避免工作负荷突然终止。

重要

此功能目前以预览版提供。 Microsoft Azure 预览版补充使用条款 包括适用于处于测试版、预览版或尚未正式发布的 Azure 功能的更多法律条款。 有关此特定预览的信息,请参阅 AKS 上的 Azure HDInsight 预览信息。 有关问题或功能建议,请在 AskHDInsight 上提交请求,并提供详细信息。关注我们以获取有关 Azure HDInsight 社区 的更多更新。

本文概述了如何读取 Delta Lake 表,而无需访问元存储(Synapse 或其他元存储(没有公共访问权限)。

可以使用 HDInsight 和 Trino 在 AKS 上对表执行以下操作。

  • 删除
  • 更新
  • 插入
  • 合并

先决条件

创建 Delta Lake 架构和表

本部分介绍在已经配置了 Delta Lake 目录的情况下,如何在预先存在的位置上创建 Delta 表。

  1. 使用 Azure 门户中的 Storage browser 浏览存储帐户,了解表的基目录所在的位置。 如果此表源自 Synapse,则可能位于 synapse/workspaces/.../warehouse/ 路径下,并将以您的表命名,同时包含 _delta_log 目录。 从文件夹旁边的三个点中选择 Copy URL

    需要将此 http 路径转换为 ABFS (Azure Blob 文件系统)路径:

    存储 http 路径的结构如下所示:https://{{AZURE_STORAGE_ACCOUNT}}.blob.core.windows.net/{{AZURE_STORAGE_CONTAINER}}/synapse/workspaces/my_workspace/warehouse/{{TABLE_NAME}}/

    ABFS 路径需要如下所示:abfss://{{AZURE_STORAGE_CONTAINER}}@{{AZURE_STORAGE_ACCOUNT}}.dfs.core.windows.net/synapse/workspaces/my_workspace/warehouse/{{TABLE_NAME}}/

    示例:abfss://container@storageaccount.dfs.core.windows.net/synapse/workspaces/workspace_name/warehouse/table_name/

  2. 在 Trino 中创建 Delta Lake 架构。

    CREATE SCHEMA delta.default;
    

    或者,还可以在特定存储帐户中创建架构:

    CREATE SCHEMA delta.default WITH (location = 'abfss://container@storageaccount.dfs.core.windows.net/trino/');
    
  3. 使用 register_table 过程创建表

    CALL delta.system.register_table(schema_name => 'default', table_name => 'table_name', table_location => 'abfss://container@storageaccount.dfs.core.windows.net/synapse/workspaces/workspace_name/warehouse/table_name/');
    
  4. 查询表格以进行验证。

    SELECT * FROM delta.default.table_name
    

在 Synapse Spark 中写入 Delta Lake 表

使用 format("delta") 将数据帧另存为 Delta 表,然后可以使用将数据帧保存为增量格式的路径,以在 Trino 中注册表。

my_dataframe.write.format("delta").save("abfss://container@storageaccount.dfs.core.windows.net/synapse/workspaces/workspace_name/warehouse/table_name")

后续步骤

如何在 Trino 中配置缓存