---
layout: Conceptual
monikers:
- microsoft-sentinel
- azure-monitor
- azure-data-explorer
defaultMoniker: azure-data-explorer
versioningType: Ranged
title: mv-expand 运算符 - Azure Data Explorer & Real-Time Intelligence | Azure Docs
canonicalUrl: https://docs.azure.cn/zh-cn/data-explorer/kusto/query/mv-expand-operator?view=azure-data-explorer
schema: Conceptual
author: alexchen2016
breadcrumb_path: /bread/toc.json
default_moniker: azure-data-explorer
depot_name: Azure.mooncake-docs
description: 了解如何使用 mv-expand 运算符将多值动态数组或属性包扩展为多个记录。
document_id: 665ad579-6b29-5234-8c85-450fe3607bf6
document_version_independent_id: b278e1a9-19df-ec73-4d53-cf752b3bd0d1
git_commit_id: 01464d9ee55becc1bbbcd2f5e2a95c5c904b180e
gitcommit: https://github.com/MicrosoftDocs/mc-docs-pr/blob/01464d9ee55becc1bbbcd2f5e2a95c5c904b180e/articles/data-explorer/kusto/query/mv-expand-operator.md
locale: zh-cn
monikerRange: 'azure-data-explorer || azure-monitor || microsoft-sentinel '
monikers:
- microsoft-sentinel
- azure-monitor
- azure-data-explorer
ms.author: v-junlch
ms.date: 2025-06-10T00:00:00.0000000Z
ms.reviewer: alexans
ms.service: azure-data-explorer
ms.topic: reference
original_content_git_url: https://github.com/MicrosoftDocs/mc-docs-pr/blob/live/articles/data-explorer/kusto/query/mv-expand-operator.md
recommendations: false
site_name: DocsAzureCN
uhfHeaderId: mooncake
updated_at: 2026-03-10T11:59:00.0000000Z
ms.translationtype: MT
ms.contentlocale: zh-cn
loc_version: 2026-02-28T10:15:01.6557296Z
loc_source_id: Github-85544329#live
loc_file_id: Github-85544329.live.Azure.mooncake-docs.articles/data-explorer/kusto/query/mv-expand-operator.md
page_type: conceptual
toc_rel: ../toc.json
feedback_system: None
feedback_product_url: ''
feedback_help_link_type: ''
feedback_help_link_url: ''
word_count: 1504
asset_id: data-explorer/kusto/query/mv-expand-operator
item_type: Content
platformId: 6732f23e-856b-cb6c-3052-709abdad5b42
---

# mv-expand 运算符 - Azure Data Explorer & Real-Time Intelligence | Azure Docs

> 
> 使用 **“版本** ”下拉列表切换服务。 [了解有关导航的详细信息](../docs-navigation)。  适用于：✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel

将多值动态数组或属性包扩展为多个记录。

`mv-expand` 可以说与聚合运算符相反，聚合运算符是将多个值打包成单个[动态](scalar-data-types/dynamic)类型化数组或属性包，如 `summarize` ... `make-list()` 和 `make-series`。 （标量）数组或属性包中的每个元素都在运算符的输出中生成一个新记录。 输入中未扩展的所有列都将复制到输出中的所有记录中。

## 语法

*T*`|mv-expand` [`kind=`（`bag` | `array`）] [`with_itemindex=`*IndexColumnName*] *ColumnName [*`to typeof(`*Typename*`)`] [`,`*ColumnName* ...] [`limit`*Rowlimit*]

*T*`|mv-expand` [（`kind=``bag` | ）] [`array`Name`=`] *ArrayExpression* [`to typeof(`*Typename*`)`] [`,` [*Name*`=`] *ArrayExpression* [`to typeof(`*Typename*`)`] ...] [`limit`*Rowlimit*]

详细了解[语法约定](/zh-cn/data-explorer/kusto/query/syntax-conventions)。

## 参数

| 名称 | 类型 | 必选 | DESCRIPTION |
| --- | --- | --- | --- |
| *ColumnName*、*ArrayExpression* | `string` | ✔️ | 一个列引用或标量表达式，含 `dynamic` 类型的值，带有数组或属性包。 数组或属性包的各个顶级元素扩展为多个记录。如果使用“ArrayExpression”且“Name”不等于任何输入列名称时，扩展的值将扩展为输出中的新列。 否则，将替换现有的 ColumnName。 |
| *名称* | `string` |  | 新列的名称。 |
| Typename | `string` | ✔️ | 指示数组元素的基础类型，该类型将成为 `mv-expand` 运算符生成的列的类型。 应用类型的操作仅限强制转换，不包括分析或类型转换。 不符合声明类型的数组元素将成为 `null` 值。 |
| *RowLimit* | `int` |  | 从每个原始行生成的最大行数。 默认值为 2147483647。 `mvexpand` 是 `mv-expand` 运算符的已过时的旧形式。 旧版本的默认行限制为 128 行。 |
| *IndexColumnName* | `string` |  | 如果指定了 `with_itemindex`，则输出将包含名为 IndexColumnName 的另一个列，其中包含最初扩展的集合中的项的索引（从 0 开始）。 |

## 退货

对于输入中的每个记录，运算符会在输出中返回零个、一个或多个记录，具体通过以下方式确定：

1. 未扩展的输入列在输出中显示其原始值。 如果单个输入记录扩展为多个输出记录，会将其值复制到所有记录中。
2. 对于扩展的每个 ColumnName 或 ArrayExpression，则根据*扩展模式*所述方式确定每个值的输出记录数量。 对于每个输入记录，将计算输出记录的最大数量。 将“并行”扩展所有数组或属性包，以便将缺少的值（如果有）替换为 null 值。 元素已按其在原始数组/包中显示的顺序扩展到行中。
3. 如果动态值为 null，则为该值 (null) 生成单个记录。 如果动态值为空数组或属性包，则不会为该值生成任何记录。 否则，将生成多个记录，因为动态值中有元素。

扩展的列的类型为 `dynamic`，除非使用 `to typeof()` 子句显式指定其类型。

### 扩展模式

支持两种模式的属性包扩展：

- `kind=bag` 或 `bagexpansion=bag`：将属性包扩展为单个条目属性包。 此模式是默认模式。
- `kind=array` 或 `bagexpansion=array`：属性包扩展为双元素 `[`*key*`,`*value*`]` 数组结构，允许对键和值进行统一access。 使用此模式还可以（例如）对属性名称运行非重复计数聚合。

## 例子

::: moniker range="azure-data-explorer"

> 
> 本文中的示例使用 [help 群集](https://dataexplorer.azure.cn/clusters/help.chinaeast2/)中的公开可用的表，例如 *Samples* 数据库中的 `StormEvents` 表。

::: moniker-end

本节中的示例演示如何使用语法来帮助get started。

### 单列 - 数组扩展

```kusto
datatable (a: int, b: dynamic)
[
    1, dynamic([10, 20]),
    2, dynamic(['a', 'b'])
]
| mv-expand b
```

**输出**

| 一个 | b |
| --- | --- |
| 1 | 10 |
| 1 | 20 |
| 2 | 一个 |
| 2 | b |

### 单列 - 包扩展

单个列的简单展开：

```kusto
datatable (a: int, b: dynamic)
[
    1, dynamic({"prop1": "a1", "prop2": "b1"}),
    2, dynamic({"prop1": "a2", "prop2": "b2"})
]
| mv-expand b
```

**输出**

| 一个 | b |
| --- | --- |
| 1 | {“prop1”： “a1”} |
| 1 | {“prop2”： “b1”} |
| 2 | {“prop1”： “a2”} |
| 2 | {“prop2”： “b2”} |

### 单列 - 包扩展为键值对

简单包扩展为键值对：

```kusto
datatable (a: int, b: dynamic)
[
    1, dynamic({"prop1": "a1", "prop2": "b1"}),
    2, dynamic({"prop1": "a2", "prop2": "b2"})
]
| mv-expand kind=array b 
| extend key = b[0], val=b[1]
```

**输出**

| 一个 | b | 关键值 | 瓦尔 |
| --- | --- | --- | --- |
| 1 | `["prop1","a1"]` | prop1 | a1 |
| 1 | `["prop2","b1"]` | prop2 | b1 |
| 2 | `["prop1","a2"]` | prop1 | a2 |
| 2 | `["prop2","b2"]` | prop2 | b2 |

### 压缩的两个列

首先展开两列以“zip”适用的列，然后展开它们：

```kusto
datatable (a: int, b: dynamic, c: dynamic)[
    1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 4, 3])
]
| mv-expand b, c
```

**输出**

| 一个 | b | c |
| --- | --- | --- |
| 1 | {“prop1”：“a”} | 5 |
| 1 | {“prop2”：“b”} | 4 |
| 1 |  | 3 |

### 两个列的笛卡尔乘积

如果要在展开两列时获取笛卡尔乘积，请将其逐个展开：

```kusto
datatable (a: int, b: dynamic, c: dynamic)
[
    1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 6])
]
| mv-expand b
| mv-expand c
```

**输出**

| 一个 | b | c |
| --- | --- | --- |
| 1 | { “prop1”： “a”} | 5 |
| 1 | { “prop1”： “a”} | 6 |
| 1 | { “prop2”： “b”} | 5 |
| 1 | { “prop2”： “b”} | 6 |

### 转换输出

若要将 mv-expand 的输出强制为某个特定类型（默认为动态），请使用 `to typeof`：

```kusto
datatable (a: string, b: dynamic, c: dynamic)[
    "Constant", dynamic([1, 2, 3, 4]), dynamic([6, 7, 8, 9])
]
| mv-expand b, c to typeof(int)
| getschema 
```

**输出**

| ColumnName | ColumnOrdinal | 日期类型 | 列类型 |
| --- | --- | --- | --- |
| 一个 | 0 | `System.String` | `string` |
| b | 1 | `System.Object` | `dynamic` |
| c | 2 | `System.Int32` | `int` |

请注意 `b` 列以 `dynamic` 的形式返回，而 `c` 以 `int` 的形式返回。

### 使用 with\_itemindex

通过 `with_itemindex` 展开数组：

```kusto
range x from 1 to 4 step 1
| summarize x = make_list(x)
| mv-expand with_itemindex=Index x
```

**输出**

| x | 索引 |
| --- | --- |
| 1 | 0 |
| 2 | 1 |
| 3 | 2 |
| 4 | 3 |