在 Fabric 中使用客户数据

Microsoft Fabric OneLake 是整个组织的统一逻辑数据湖,旨在作为所有分析数据的单个位置。 每个 Microsoft Fabric 租户都会自动附带此功能,并且该功能是基于 Azure Data Lake Storage(ADLS)Gen2 构建的。 OneLake 支持任何类型的结构化或非结构化文件,并采用 Delta Parquet 格式存储所有表格数据。 它通过提供单个数据湖来实现跨不同业务组的协作,该数据湖在默认情况下由分布式所有权管理,以便在租户边界内进行协作。 租户中的工作区使组织的不同部分都能分配所有权和访问策略,并且 OneLake 中的所有数据都通过 Lakehouse 和 Warehouse 等数据项进行访问。 就数据存储而言,OneLake 充当引入、转换、实时见解和商业智能可视化的常见存储位置。 它集中管理不同的 Fabric 服务,并作为 Fabric 中所有工作负载所使用的数据项的存储库。

Microsoft Fabric Eventhouse 提供了一个可缩放的解决方案,用于处理和分析大量数据,尤其是在实时分析方案中。 Eventhouses 有效地管理实时数据流,使组织能够近乎实时地引入、处理和分析数据。 它们非常适合需要及时见解的方案,是半结构化和自由文本分析的首选引擎。 Eventhouse 是一个数据库工作区,可通过同时管理多个数据库来跨项目共享、优化性能和成本。 Eventhouses 支持来自多个源和格式的数据,根据引入时间自动为数据编制索引和分区。

如何在 Microsoft Fabric 中读取和写入数据

Microsoft Fabric 是一个可用于存储和管理客户数据的平台。 要在 Fabric 中读取和写入数据,需要使用 Fabric REST API 和适当的身份验证方法。

API 权限

某些访问客户数据的方法需要使用 Fabric 之外的其他服务,例如 Azure 存储或 Azure SQL 数据库。 例如,在 Microsoft Fabric 开发人员工具包示例中,API 权限 Azure 存储 user_impersonation 与 Power BI 服务 Lakehouse.Read.All 权限结合使用,以访问 Lakehouse 中的数据。

可以使用 Azure SQL 数据库访问 Warehouse 项的表数据。 在这种情况下,使用 Azure SQL 数据库 user_impersonation 配置应用以代表用户查询数据库,并使用 Power BI 服务 Warehouse.Read.All 查询 Fabric REST API Get Warehouse 终结点。

确保根据开发需求配置 Microsoft Entra ID 应用。

身份验证

在代表用户开始使用 Fabric REST API 或其他服务(例如 Azure 存储和 Azure SQL 数据库)之前,需要使用令牌进行身份验证。 可以通过令牌交换流程来获取此令牌。

Fabric 工作负载开发工具包 SDK 提供了在工作负载前端中获取访问令牌的方法。 有关示例,请参阅示例工作负载控制器

必须将此客户端令牌传递给工作负载后端,并使用代理流交换具有必要作用域的令牌,以访问所需的资源(例如 OneLake)。 例如,为了访问和读取 Lakehouse,用户必须授权应用程序使用 Azure 存储 user_impersonation 权限代表他们进行 API 调用。 此外,在后端,必须使用委派作用域 https://storage.azure.com/user_impersonation 获取访问令牌才能使用 Azure 存储。

如果决定使用 SQL 访问客户数据,则必须获取具有作用域 https://database.windows.net//user_impersonation 的访问令牌,才能使用 Azure SQL 数据库和 Microsoft.Data.SqlClient 命名空间。 访问令牌必须按编写的方式使用,user_impersonation 前必须有两个正斜杠,以便由 SQLConnection 类进行验证。 有关令牌身份验证的更多示例,请参阅 Microsoft Fabric 开发工具包示例。

有关如何获取令牌的更多详细信息,请参阅 Microsoft Fabric 工作负载开发 REST API 文档

读取元数据

Fabric REST API 提供了访问项属性的方法。 例如,查询 Get Lakehouse API 可提供特定 Lakehouse 的元数据,包括 OneLake 路径和 SQL 连接字符串等有用属性。 另一个有用的终结点是 Get Warehouse API,它会返回以下信息:

    {
        Id: Guid
        Type: string
        DisplayName: string
        Description: string
        WorkspaceId: Guid
        Properties {
            ConnectionInfo: string
            CreatedDate: DateTime
            LastUpdatedTime: DateTime
        }
    }

此处,“ConnectionInfo”属性是 Warehouse SQL Server 的完全限定域名 (FQDN)。 可以使用此 FQDN 建立 SQL 连接。 有关详细信息,请参阅Microsoft Fabric 中的数据仓库连接。 有关实现示例,请参阅 Microsoft Fabric 工作负载开发工具包

读取数据

进行身份验证后,你可以使用 Azure Data Lake Storage REST API 连接到 OneLake,以读取不同类型的数据。 我们建议使用 Delta Lake 协议来读取表。

或者,如果选择使用 Azure SQL 数据库,可实施以下过程,以读取 Warehouse 中的数据。

  1. 创建授权上下文。 有关创建授权上下文的示例,请参阅 AuthenticateDataPlaneCall 方法

  2. 使用从前端传递的持有者令牌,代表用户获取具有 Warehouse.Read.All 作用域的令牌。

  3. 使用 Fabric 令牌调用 Get Warehouse API。 需要访问连接信息和数据仓库的显示名称,数据仓库是服务器的初始目录。

  4. 为用户获取具有 SQL 作用域的令牌。 若要成功建立 SQL 连接,请使用作用域 https://database.windows.net//user_impersonation

  5. 使用 SQL 令牌和连接信息打开 SQL 连接:

    private SqlConnection GetSqlConnection(string token, string databaseFqdn, string initialCatalog)
            {
                var builder = new SqlConnectionStringBuilder();
                builder.DataSource = databaseFqdn; // ConnectionInfo from Get Warehouse API
                builder.InitialCatalog = initialCatalog; //display name of the Warehouse
                builder.ConnectTimeout = 120;
    
                var connection = new SqlConnection();
                connection.AccessToken = token; // SQL token acquired with the Azure SQL Database user_impersonation scope
                connection.ConnectionString = builder.ConnectionString;
                connection.Open();
                return connection;
            }
    
  6. 现在,可以查询此连接以访问 Warehouse 中的数据。 有关使用 Microsoft.Data.SqlClient 命名空间的详细信息,请参阅 Microsoft.Data.SqlClient 命名空间文档

Eventhouse API

进行身份验证后,您可以执行创建 Eventhouse、删除 Eventhouse、获取 Eventhouse 列表等操作。其中一种方法是通过门户 - Eventhouse 概述

另一种方法是使用 Eventhouse Rest API - Eventhouse Rest API 概述

  1. 授权。
  2. 使用从前端传递的持有者令牌,代表用户获取具有 FabricEventhouse.Read.All 作用域的令牌。
  3. 使用 Fabric 令牌调用 Get Eventhouse API
  4. 现在,使用 Eventhouse 的数据库列表,可以查询所需的特定数据库,如下面的“查询数据”部分所述。

查询数据

若要从 Eventhouse KQL 数据库查询数据,请执行以下步骤:首先,使用适当的方法进行身份验证。 接下来,连接到 Eventhouse 以检索数据库列表。 然后,查询要访问的特定数据库。 区分查询命令(如 .show tables)和数据查询(如 <TableName> | take 10)非常重要。 有关 KQL REST API 的完整文档,请参阅 KQL REST API 文档

另一种方法是使用 Eventhouse Rest API - Eventhouse Rest API 概述

  1. 授权。
  2. 使用从前端传递的持有者令牌,代表用户获取具有 KQLDatabase.ReadWrite.All 作用域的令牌。
  3. 使用 Kql 令牌调用 KQL Rest API

写入数据

除了使用令牌读取数据之外,还可以使用 ADLS API 将数据写入表中,如 Delta Lake 协议所述。

还可以使用 API 创建文件和目录。

或者,可以使用其他 Fabric 工作负载将数据写入平台中。 例如,可以使用 Fabric 的 Lakehouse 工作负载 API 有效地将常见文件类型加载到优化的 Delta 表。 为此,请将 POST 请求发送到表 – 加载表 API 终结点

SQL 连接还可用于执行将数据插入表中的命令。

OneLake 集成

可以选择在工作负载中使用 OneLake 集成。 如果这样做,当为工作负荷创建新项时,Fabric 将自动为新项创建文件夹。

若要选择加入,项的清单 XML 必须通过将属性设置为 CreateOneLakeFoldersOnArtifactCreationtrue 来声明此项。 例如:

<ItemManifestConfiguration xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" SchemaVersion="1.101.0">  
  <Item TypeName="Org.WorkloadSample.SampleWorkloadItem" Category="Data" CreateOneLakeFoldersOnArtifactCreation="true">
    <Workload WorkloadName="Org.WorkloadSample" />
    ...
  </Item>
</ItemManifestConfiguration>

注释

SchemaVersion 必须设置为 1.101.0(或更高版本支持的版本)。

必须在 WorkloadManifest.xml 中设置相同的 SchemaVersion:

<WorkloadManifestConfiguration xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" SchemaVersion="1.101.0">
  <Workload WorkloadName="Org.WorkloadSample" HostingType="Remote">
  ...
  </Workload>
</WorkloadManifestConfiguration>

创建新项时,将在 OneLake 中创建以下根文件夹:

<WorkspaceID>/<ItemID>/Files

<WorkspaceID>/<ItemID>/Tables

在这些文件夹下可以创建附加的文件夹,并使用这些文件夹以任何格式存储数据(在Files文件夹中),或以parquet格式存储数据(在Tables文件夹中)。 按照上述 说明 从 OneLake 存储读取/写入。