在 Azure Cosmos DB 中启用机群分析(预览版)

重要

此功能目前以预览版提供,不提供服务级别协议。 目前,不建议在生产环境中使用预览功能。 此预览版的某些功能不受支持或可能具有功能约束。 有关详细信息,请参阅 Azure 预览版的补充使用条款。

在本指南中,您将为 Microsoft Fabric 工作区启用 Azure Cosmos DB 群集分析。

本指南将向您介绍如何为 Azure Data Lake Storage 帐户启用 Azure Cosmos DB 群组分析功能。

先决条件

  • 现有的 Azure Cosmos DB 机队

  • 现有 Microsoft Fabric 工作区

    • 工作区必须使用 OneLake 作为默认存储位置。

    • 工作区必须由许可或试用 Fabric 容量提供支持。

注释

建议为 Fleet Analytics 创建专用 Fabric 工作区,因为与该功能关联的服务主体需要参与者访问整个工作区。

  • 与 Azure Data Lake Storage 兼容的现有 Azure 存储帐户(Gen2)

    • 必须在创建帐户时启用 分层命名空间 功能。

启用机群分析

首先,配置车队分析所需的资源。

  1. 登录到 Azure 门户(https://portal.azure.cn)。

  2. 导航到现有的 Azure Cosmos DB 舰队。

  3. 在机群的页面上,在资源菜单的“监控”部分选择“机群分析”。

  4. 然后选择 “添加目标”。

  5. 在 车队分析 对话框中,选择 发送到 Fabric 工作区。 然后,选择现有的 Fabric 工作区,选择现有的 OneLake 湖屋,然后保存目标。

    Azure 门户中 Fabric 工作区的机群分析对话框的屏幕截图。

  6. 在 Microsoft Fabric 门户中导航到 Fabric 工作区。

  7. 在工作区的“管理”部分中,通过搜索共享的“Cosmos DB 舰队分析”服务主体,将用于舰队分析的主体添加为“参与者”角色。

    Fabric 门户中工作区基于角色的访问控制配置的屏幕截图。

    重要

    未能完成此步骤会导致数据未写入目标 Fabric 工作区。

  8. 保存所做更改。

  1. 登录到 Azure 门户(https://portal.azure.cn)。

  2. 导航到现有的 Azure Cosmos DB 舰队。

  3. 在机群的页面上,在资源菜单的“监控”部分选择“机群分析”。

  4. 然后选择 “添加目标”。

  5. 在 “舰队分析 ”对话框中,选择“ 发送到存储帐户”。 然后,选择现有的 Azure 存储帐户,选择现有容器,然后 保存 目标。

    Azure 门户中 Azure 存储帐户的机群分析对话框的屏幕截图。

  6. 导航到 Azure 存储帐户。 然后,导航到 “访问控制”(IAM) 页。

  7. 选择 “添加角色分配 ”菜单选项。

  8. 在 “添加角色分配 ”页上,选择 “存储 Blob 参与者 ”角色,以授予向现有帐户贡献 Blob 的权限。

  9. 现在,请使用 “+ 选择成员 ”选项。 在对话框中,搜索并选择共享 Cosmos DB Fleet Analytics 服务主体。

    Azure 门户中帐户基于角色的访问控制配置的屏幕截图。

    重要

    未能完成此步骤会导致数据未写入目标 Azure 存储帐户。

  10. 查看 + 分配角色分配。

查询和可视化数据

在星型架构设计中,检索详细信息通常需要按照标准最佳做法将事实数据表与其相关维度表联接。 本部分介绍使用 Microsoft Fabric 查询和可视化数据的步骤。

  1. 打开你的 Fabric 工作区。

  2. 导航到现有的 OneLake 资源。

    Microsoft Fabric 工作区中现有 OneLake 资源的屏幕截图。

  3. 在 SQL 终结点资源管理器中,选择任何表并运行 SELECT TOP 100 查询以快速观察数据。 可以在上下文菜单中找到此查询。

    工作区中 SQL 端点浏览器的上下文菜单屏幕截图,其中包含“SELECT TOP 100”查询选项。

    小窍门

    或者,运行以下查询以查看帐户级详细信息:

    SELECT TOP (100) [Timestamp],
        [ResourceId],
        [FleetId],
        [DefaultConsistencyLevel],
        [IsSynapseLinkEnabled],
        [IsFreeTierEnabled],
        [IsBurstEnabled],
        [BackupMode],
        [BackupStrategy],
        [BackupRedundancy],
        [BackupIntervalInMinutes],
        [BackupRetentionIntervalInHours],
        [TotalRUPerSecLimit],
        [APISettings],
        [AccountKeySettings],
        [LastDateAnyAccountKeyRotated]
    FROM [FactAccountHourly]
    
  4. 观察查询的结果。 请注意,你仅引用了 ResourceId 字段。 仅使用此查询的结果,无法确定单个行的确切数据库或容器。

  5. 运行此示例查询,将DimResource和FactRequestHourly表联接起来,以按事务查找最活跃的前100个帐户。

    SELECT TOP 100
        DR.[SubscriptionId],
        DR.[AccountName],
        DR.[ResourceGroup],
        SUM(FRH.[TotalRequestCount]) AS sum_total_requests
    FROM 
        [FactRequestHourly] FRH
    JOIN 
        [DimResource] DR
        ON FRH.[ResourceId] = DR.[ResourceId]
    WHERE 
        FRH.[Timestamp] >= DATEADD(DAY, -7, GETDATE()) -- Filter for the last 7 days
        AND ResourceName IN ('Document', 'StoredProcedure') -- Filter for Dataplane Operations
    GROUP BY 
        DR.[AccountName],
        DR.[SubscriptionId],
        DR.[ResourceGroup]
    ORDER BY
    sum_total_requests DESC; -- Order by total requests in descending order
    
  6. 运行此查询, 按存储查找前 100 个最大帐户。

    SELECT TOP 100
        DR.[SubscriptionId],
        DR.[AccountName],
        MAX(FRH.[MaxDataStorageInKB] / (1024.0 * 1024.0)) AS DataUsageInGB,
        MAX(FRH.[MaxIndexStorageInKB] / (1024.0 * 1024.0)) AS IndexUsageInGB,
        MAX(
            FRH.[MaxDataStorageInKB] / (1024.0 * 1024.0) + 
            FRH.[MaxIndexStorageInKB] / (1024.0 * 1024.0)
        ) AS StorageInGB
    FROM 
        [FactResourceUsageHourly] FRH
    JOIN 
        [DimResource] DR
        ON FRH.[ResourceId] = DR.[ResourceId]
    WHERE 
        FRH.[Timestamp] >= DATEADD(DAY, -1, GETDATE()) -- Filter for the last 1 day
    GROUP BY 
        DR.[AccountName],
        DR.[SubscriptionId]
    ORDER BY
        StorageInGB DESC; -- Order by total storage usage
    
  7. 现在,通过打开上下文菜单并选择“ 另存为”视图,在数据上创建视图。 为视图指定唯一的名称,然后选择“ 确定”。

    工作区中 SQL 查询的“另存为视图”上下文菜单选项的屏幕截图。

    用于在工作区中指定新视图名称的对话框的屏幕截图。

    小窍门

    或者,直接使用此查询创建视图:

    CREATE VIEW [MostActiveCustomers]
    AS
    SELECT 
        a.ResourceId AS UsageResourceId,
        a.Timestamp,
        a.MeterId,
        a.FleetId,
        a.ConsumedUnits,
        b.ResourceId AS ResourceDetailId
    FROM
        FactMeterUsageHourly a
    INNER JOIN
        DimResource b ON a.ResourceId = b.ResourceId
    
  8. 导航到终结点“视图”文件夹中新建的视图。

    工作区中 SQL 终结点层次结构中的“Views”文件夹的屏幕截图。

  9. 导航到最近创建的视图(或查询),然后选择 “探索此数据(预览)”,然后选择 “可视化结果”。

    用于在工作区中可视化现有查询的菜单选项的屏幕截图。

  10. 在 Power BI 登陆页上,为方案创建相关视觉对象。 例如,可以显示已启用 自动缩放 功能的 Azure Cosmos DB 工作负荷的百分比。

    工作区中 SQL 查询或视图的 Power BI 可视化对话框的屏幕截图。

本部分逐步讲解如何创建和查询从 Azure 存储(ADLS)或 Azure Databricks 中存储的数据加载的表或数据帧。 本部分使用包含 Python 和 SQL 单元格的 Notebook 来连接 Apache Spark。

  1. 首先,定义针对 [目标实体] 的 Azure 存储帐户配置

    # Define storage configuration
    container_name = "<azure-storage-container-name>"
    account_name = "<azure-storage-account-name>"
    base_url = f"abfss://{container_name}@{account_name}.dfs.core.chinacloudapi.cn"
    source_path = f"{base_url}/FactResourceUsageHourly"
    
  2. 以表的形式创建数据。 通过删除和重新创建 表,从外部源(Azure 存储 - ADLS)重新加载和刷新数据fleet_data。

    table_name = "fleet_data"
    
    # Drop the table if it exists
    spark.sql(f"DROP TABLE IF EXISTS {table_name}")
    
    # Create the table
    spark.sql(f"""
        CREATE TABLE {table_name}
        USING delta
        LOCATION '{source_path}'
    """)
    
  3. 查询表 fleet_data 并显示结果。

    # Query and display the table
    df = spark.sql(f"SELECT * FROM {table_name}")
    display(df)
    
  4. 定义要创建用于处理机群分析数据的额外表的完整列表。

    # Table names and folder paths (assumed to match)
    tables = [
        "DimResource",
        "DimMeter",
        "FactResourceUsageHourly",
        "FactAccountHourly",
        "FactRequestHourly",
        "FactMeterUsageHourly"
    ]
    
    # Drop and recreate each table
    for table in tables:
        spark.sql(f"DROP TABLE IF EXISTS {table}")
        spark.sql(f"""
            CREATE TABLE {table}
            USING delta
            LOCATION '{base_url}/{table}'
        """)
    
  5. 使用这些表中的任何一个运行查询。 例如,此查询交易次数查找前 100 个最活跃帐户。

    SELECT 
        DR.SubscriptionId,
        DR.AccountName,
        DR.ResourceGroup,
        SUM(FRH.TotalRequestCount) AS sum_total_requests
    FROM 
        FactRequestHourly FRH
    JOIN 
        DimResource DR
        ON FRH.ResourceId = DR.ResourceId
    WHERE 
        FRH.Timestamp >= DATE_SUB(CURRENT_DATE(), 7) -- Filter for the last 7 days
        AND FRH.ResourceName IN ('Document', 'StoredProcedure') -- Filter for Dataplane Operations
    GROUP BY 
        DR.AccountName,
        DR.SubscriptionId,
        DR.ResourceGroup
    ORDER BY
        sum_total_requests DESC
    LIMIT 100; -- Limit to top 100 results
    
  6. 运行此查询, 按存储查找前 100 个最大帐户。

    SELECT 
        DR.SubscriptionId,
        DR.AccountName,
        MAX(FRH.MaxDataStorageInKB / (1024.0 * 1024.0)) AS DataUsageInGB,
        MAX(FRH.MaxIndexStorageInKB / (1024.0 * 1024.0)) AS IndexUsageInGB,
        MAX(
            FRH.MaxDataStorageInKB / (1024.0 * 1024.0) + 
            FRH.MaxIndexStorageInKB / (1024.0 * 1024.0)
        ) AS StorageInGB
    FROM 
        FactResourceUsageHourly FRH
    JOIN 
        DimResource DR
        ON FRH.ResourceId = DR.ResourceId
    WHERE 
        FRH.Timestamp >= DATE_SUB(CURRENT_DATE(), 1) -- Filter for the last 1 day
    GROUP BY 
        DR.AccountName,
        DR.SubscriptionId
    ORDER BY
        StorageInGB DESC
    LIMIT 100; -- Limit to top 100 results