你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

重要

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

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

可以结合使用 Trino 和 HDInsight on AKS 对表执行以下操作。

  • Delete
  • UPDATE
  • INSERT
  • MERGE

先决条件

创建 Delta Lake 架构和表

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

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

    需要将此 http 路径转换为 ABFS (Azure Blob File System) 路径:

    存储 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 中配置高速缓存