.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=T
,sum
列将包含部分数据。 此视图仅包含在 alter 执行后处理的记录。