.alter materialized-view

适用于:✅Azure 数据资源管理器

更改具体化视图可用于更改具体化视图的查询,同时保留视图中的现有数据。

警告

更改具体化视图时要格外小心。 使用不当可能会导致数据丢失。

权限

你必须至少具有具体化视图管理员权限才能运行此命令。

语法

.alter materialized-view [ with (PropertyName = PropertyValue,...)] MaterializedViewName on table SourceTableName { Query }

详细了解语法约定

参数

客户 类型​​ 必需 说明
PropertyName、PropertyValue string 受支持属性列表中的一组属性(采用名称和值对形式)。
MaterializedViewName string ✔️ 具体化视图的名称。
SourceTableName string ✔️ 定义视图的源表的名称。
查询 string ✔️ 具体化视图的查询定义。

支持的属性

with (PropertyName = PropertyValue) 子句支持以下属性。 所有属性都是可选的。

名称 Type 说明
lookback timespan 仅对 arg_max/arg_min/take_any 具体化视图有效。 此属性限制需要重复项的时间段。 例如,如果在 arg_max 视图上指定了 6 小时的回溯,则新引入的记录与现有记录之间的重复数据删除将只考虑最长 6 小时前引入的记录。

回溯相对于 ingestion_time。 错误地定义回溯时段可能会导致具体化视图中出现重复项。 例如,如果一个特定键的记录在同一键的记录被引入 10 小时后引入,而回溯设置为 6 小时,则此键将是视图中的重复项。 在实现时查询时将应用回溯时段。
autoUpdateSchema bool 是否根据源表更改自动更新视图。 默认值为 false。 此选项仅对 arg_max(Timestamp, *)/arg_min(Timestamp, *)/take_any(*) 类型的视图(仅当列的参数为 * 时)有效。 如果将此选项设置为 true,则对源表所做的更改会自动反映在具体化视图中。
dimensionTables array 一个动态参数,其中包含视图中维度表的数组。 请参阅查询参数
文件夹 string 具体化视图的文件夹。
docString string 记录具体化视图的字符串。

返回

输出架构:

名称 Type 说明
Name string 具体化视图的名称。
SourceTable string 定义视图的源表的名称。
查询 string 具体化视图的查询定义。
MaterializedTo datetime 源表中的最大具体化 ingestion_time() 时间戳。 有关详细信息,请参阅具体化视图的工作原理
LastRun datetime 上次运行具体化的时间。
LastRunResult string 上次运行的结果。 如果运行成功,则返回 Completed,否则返回 Failed
IsHealthy bool 当视图被认为正常时为 true,否则为 false。 如果视图在最后一小时之前被成功地具体化(MaterializedTo 大于 ago(1h)),则认为它是正常的。
IsEnabled bool 如果视图已启用,则为 true(请参阅禁用或启用具体化视图)。
Folder string 在其中创建具体化视图的文件夹。
DocString string 分配给具体化视图的说明。
AutoUpdateSchema bool 视图是否已启用自动更新。
EffectiveDateTime datetime 视图的生效日期时间,在创建期间确定(请参阅 .create materialized-view)。
回溯 timespan 时间跨度,用于限制需要重复项的时间段。

示例

修改具体化视图的查询定义

以下命令修改具体化视图 MyView 的查询定义:

.alter materialized-view MyView on table MyTable
{
    MyTable | summarize arg_max(Column3, *) by Column1
}

输出

名称 SourceTable 查询 MaterializedTo LastRun LastRunResult IsHealthy IsEnabled 文件夹 DocString AutoUpdateSchema EffectiveDateTime 回溯
MyView MyTable MyTable | summarize arg_max(Column3, *) by Column1 2023-02-26T16:40:03.3345704Z 2023-02-26T16:44:15.9033667Z 已完成 true true false 2023-02-23T14:01:42.5172342Z

用例

  • 向视图添加聚合 - 例如,通过将视图查询更改为 T | summarize count(), min(Value), avg(Value) by Id,将 avg 聚合添加到 T | summarize count(), min(Value) by Id 中。
  • 更改除 summarize 运算符之外的运算符。 例如,通过将 T | summarize arg_max(Timestamp, *) by User 更改为 T | where User != 'someone' | summarize arg_max(Timestamp, *) by User 来筛选掉某些记录。
  • 由于源表发生了更改,在不更改查询的情况下更改。 例如,假定有一个 T | summarize arg_max(Timestamp, *) by Id 视图,它未设置为 autoUpdateSchema(请参阅 .create materialized-view 命令)。 如果在视图的源表中添加或删除了某列,则该视图将被自动禁用。 使用完全相同的查询执行 alter 命令,以更改具体化视图的架构,使之与新表架构保持一致。 在更改后,仍必须使用 enable materialized view 命令显式启用该视图。

限制

  • 不支持的更改:

    • 通过表达式对具体化视图组进行更改。
    • 更改列类型。
    • 重命名列。 例如,将 T | summarize count() by Id 的视图更改为 T | summarize Count=count() by Id 会删除 count_ 列并创建新列 Count(该列最初仅包含 null)。
  • 对现有数据的影响:

    • 更改具体化视图不会影响现有数据。
    • 向查询添加筛选器仅适用于新引入的记录,不会更改已具体化的记录。
      • 对于所有现有记录,新列都会收到 null,直到在 alter 命令后引入的记录修改 null 值。
      • 例如:T | summarize count() by bin(Timestamp, 1d) 的视图更改为 T | summarize count(), sum(Value) by bin(Timestamp, 1d)。 对于已在更改视图之前处理的记录的特定 Timestamp=Tsum 列将包含部分数据。 此视图仅包含在 alter 执行后处理的记录。