OneLake 和 Azure Data Lake Storage (ADLS) Gen2 的 API 一致性

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

托管 OneLake 文件夹

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

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

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

不支持的请求标头和参数

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

OneLake 接受几乎所有与 ADLS Gen2 相同的标头,仅忽略与 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 Gen2 不同,因此对与权限相关的响应标头进行了不同处理:

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

开源集成

由于 OneLake 支持与 ADLS Gen2 相同的 API,因此许多与 ADLS Gen2 兼容的开源库和包可与 OneLake 无缝配合使用。 其他库可能需要进行少量更新才能适应 OneLake 终结点或其他兼容性问题。 由于最近的更改,已确认以下库与 OneLake 兼容。 此列表并不详尽:

示例

列出工作区中的项

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

在湖屋中创建文件夹

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