You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Cognitive Search:通过REST API动态添加Blob并计算列计数总和

使用Azure Cognitive Search实现.xlsx Blob指定列计数总和

前提准备

  • 确保Azure存储账户与Cognitive Search服务处于同一区域,且已为Search服务分配存储Blob数据读取者角色,获取存储访问权限。
  • 所有.xlsx文件的目标统计列结构需一致(列名、数据类型统一,避免解析异常)。

步骤1:创建索引,定义核心字段

需创建包含以下字段的索引,用于标识Blob和存储统计列数据:

  • metadata_storage_path:自动提取的Blob唯一路径,设为键字段、可筛选可排序。
  • metadata_storage_container:Blob所属容器名称,用于按容器筛选/分组。
  • 目标统计列(如target_column):根据实际数据类型设置(如Edm.Int32或Edm.String),需开启可筛选、可分面属性。

示例索引定义(REST API请求体):

{
  "name": "xlsx-blob-index",
  "fields": [
    { "name": "metadata_storage_path", "type": "Edm.String", "key": true, "filterable": true, "sortable": true },
    { "name": "metadata_storage_container", "type": "Edm.String", "filterable": true },
    { "name": "target_column", "type": "Edm.Int32", "filterable": true, "facetable": true }
  ]
}

步骤2:创建数据源,关联多容器Blob

配置数据源时指定存储账户连接字符串,通过container.name: "*"关联所有容器(或指定容器名称数组),同时启用高水位线策略实现增量同步。

示例数据源定义:

{
  "name": "xlsx-blob-datasource",
  "type": "azureblob",
  "credentials": { "connectionString": "DefaultEndpointsProtocol=https;AccountName=your-storage-account;AccountKey=your-key;EndpointSuffix=core.windows.net" },
  "container": { "name": "*" },
  "dataChangeDetectionPolicy": { "@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy", "highWaterMarkColumnName": "metadata_storage_last_modified" }
}

步骤3:创建索引器,解析.xlsx文件到索引

设置索引器的parsingMode为excel,确保正确解析.xlsx内容,同时排除非.xlsx文件避免无效数据。可按需配置同步间隔(如每小时同步一次)。

示例索引器定义:

{
  "name": "xlsx-blob-indexer",
  "dataSourceName": "xlsx-blob-datasource",
  "targetIndexName": "xlsx-blob-index",
  "parameters": {
    "configuration": {
      "parsingMode": "excel",
      "excludedFileNameExtensions": ".csv,.txt",
      "firstLineContainsHeaders": true
    }
  },
  "schedule": { "interval": "PT1H" }
}

步骤4:调用REST API获取计数总和

场景1:获取所有Blob的指定列计数/总和

  • 统计非空值数量:使用分面聚合,无需返回具体文档
POST https://your-search-service.search.windows.net/indexes/xlsx-blob-index/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: your-admin-key

{
  "queryType": "full",
  "facets": ["target_column,count"],
  "top": 0
}

返回结果的@search.facets字段将包含目标列的非空值总数。

  • 计算数值列总和:使用$compute语法
POST https://your-search-service.search.windows.net/indexes/xlsx-blob-index/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: your-admin-key

{
  "queryType": "full",
  "compute": ["sum(target_column) as total_sum"],
  "top": 0
}

场景2:获取每个Blob的指定列计数

通过groupBy按Blob路径分组,统计单Blob内目标列的非空值数量:

POST https://your-search-service.search.windows.net/indexes/xlsx-blob-index/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: your-admin-key

{
  "queryType": "full",
  "groupBy": "metadata_storage_path",
  "select": "metadata_storage_path",
  "compute": ["count(target_column) as blob_count"],
  "top": 1000 // 根据Blob数量调整上限
}

若需按容器分组统计,将groupBy改为metadata_storage_container即可。

注意事项

  • 若.xlsx包含多工作表,需在索引器配置中添加excelSheetName: "*"解析所有工作表,或指定具体工作表名。
  • 调用查询API前需确保索引器同步完成,可通过索引器状态API检查同步进度。
  • 大型数据集建议设置合理的同步间隔,避免频繁同步影响服务性能。

内容的提问来源于stack exchange,提问作者Arun P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 18:42:51