OneLake 和 Azure Data Lake Storage (ADLS) API 功能对等

OneLake 支持与 Azure Data Lake Storage(ADLS)和 Azure Blob 存储相同的 API,使用户能够使用他们目前使用的工具在 OneLake 中读取、写入和管理其数据。 由于 OneLake 是托管的逻辑数据湖,因此某些功能的管理方式与 Azure 存储中的管理方式不同,并非所有行为都受 OneLake 支持。 此页面详细介绍了这些差异,包括 OneLake 托管文件夹、API 差异和开放源代码兼容性。

托管 OneLake 文件夹

Fabric 租户中的工作区和数据项定义 OneLake 的结构。 管理工作区和项是通过 Fabric 体验完成的 - OneLake 不支持通过 ADLS API 创建、更新或删除工作区或项。 OneLake 仅允许在工作区(容器)级别和租户(帐户)级别进行 HEAD 调用,因为必须在 Fabric 管理门户中对租户和工作区进行更改。

OneLake 还强制实施 Fabric 项的文件夹结构,保护项目及其托管子文件夹,防止通过 ADLS 和 Blob API 创建、删除或重命名。 Fabric 管理的文件夹包括项目中的顶级文件夹(例如 /MyLakehouse.lakehouse)和其中的第一级文件夹(例如 /MyLakehouse.lakehouse/Files/MyLakehouse.lakehouse/Tables)。

可以对这些托管文件夹中创建的任何文件夹或文件执行 CRUD 操作,并针对工作区和项文件夹执行只读操作。

不支持的请求标头和参数

即使在用户创建的文件和文件夹中,OneLake 也会通过 ADLS API 限制某些 Fabric 管理操作。 必须使用 Fabric 体验来更新权限或编辑项和工作区,由 Fabric 管理其他选项(例如访问层)。

OneLake 几乎接受与存储服务相同的所有标头,仅忽略与 OneLake 上不允许操作相关的某些标头。 由于这些标头不会改变整个调用的行为,因此 OneLake 会忽略禁止的标头,在新的“x-ms-rejected-headers”响应标头中返回它们,并允许其余的调用。 例如,OneLake 忽略 PUT 调用中的“x-ms-owner”参数,因为 Fabric 和 OneLake 没有与 Azure 存储相同的拥有用户的概念。

OneLake 会拒绝包含不允许的查询参数的请求,因为查询参数会更改整个调用的行为。 例如,使用“setAccessControl”参数的 UPDATE 调用会被阻止,因为 OneLake 从不支持通过 Azure 存储 API 设置访问控制。

OneLake 不允许以下行为及其关联的请求标头和 URI 参数:

  • 设置访问控制
    • URI 参数:
      • 操作:setAccessControl(请求被拒绝)
      • 操作:setAccessControlRecursive(请求被拒绝)
    • 请求标头:
      • x-ms-owner(忽略标头)
      • x-ms-group(忽略标头)
      • x-ms-permissions(忽略标头)
      • x-ms-group(忽略标头)
      • x-ms-acls(忽略标头)
  • 设置加密范围
    • 请求标头:
      • x-ms-encryption-key(忽略标头)
      • x-ms-encryption-key(忽略标头)
      • x-ms-encryption-algorithm:AES256(忽略标头)
  • 设置访问层
    • 请求标头:
      • x-ms-access-tier(忽略标头)

响应标头差异

由于 OneLake 使用的权限模型与 ADLS 不同,与权限相关的响应标头的处理方式不同:

  • “x-ms-owner”和“x-ms-group”始终返回“$superuser”,因为 OneLake 没有拥有用户或组
  • “x-ms-permissions”始终返回“---------”,因为 OneLake 没有拥有用户、组或公共访问权限
  • “x-ms-acl”以“rwx”形式返回转换为 POSIX 访问控制列表 (ACL) 的调用用户 Fabric 权限

开源集成

由于 OneLake 支持与 ADLS 和 Blob 存储相同的 API,因此许多与 ADLS 和 Blob 存储兼容的开源库和包可与 OneLake 无缝协作(例如,Azure 存储资源管理器)。 其他库可能需要进行少量更新才能适应 OneLake 终结点或其他兼容性问题。 由于最近的更改,已确认以下库与 OneLake 兼容。 此列表并不详尽:

示例

列出工作区中的项目(ADLS)

GET https://onelake.dfs.fabric.microsoft.com/myWorkspace?resource=filesystem&recursive=false

列出工作区中的项(Blob)

GET  https://onelake.blob.fabric.microsoft.com/myWorkspace?restype=container&comp=list&delimiter=%2F

在 Lakehouse(ADLS)中创建一个文件夹

PUT https://onelake.dfs.fabric.microsoft.com/myWorkspace/myLakehouse.Lakehouse/Files/newFolder/?resource=directory

获取 Blob 属性 (Blob)

HEAD  https://onelake.blob.fabric.microsoft.com/myWorkspace/myLakehouse.Lakehouse/Files/file.txt