你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
.create-or-alter materialized-view
适用于:✅Microsoft Fabric✅Azure 数据资源管理器
创建具体化视图或更改现有的具体化视图。
权限
你必须至少具有具体化视图管理员权限才能运行此命令。
语法
.create-or-alter
materialized-view
[ with
(
PropertyName =
PropertyValue,
...)
] MaterializedViewName on table
SourceTableName {
Query }
详细了解语法约定。
参数
客户 | 类型 | 必需 | 说明 |
---|---|---|---|
PropertyName、PropertyValue | string |
受支持属性列表中的一组属性(采用名称和值对形式)。 | |
MaterializedViewName | string |
✔️ | 具体化视图的名称。 视图名称不能与同一数据库中的表名或函数名冲突,并且必须遵循标识符命名规则。 |
SourceTableName | string |
✔️ | 定义视图的源表的名称。 |
查询 | string |
✔️ | 具体化视图的查询定义。 |
支持的属性
新建表
如果表是新的,则 with(
PropertyName =
PropertyValue)
支持以下属性。 所有属性都是可选的。
名称 | Type | 说明 |
---|---|---|
backfill | bool |
是要根据 SourceTable 中当前存在的所有记录创建视图 (true ),还是从当前时间开始创建视图 (false )。 默认值为 false 。 有关详细信息,请参阅回填具体化视图。 |
effectiveDateTime | datetime |
仅在使用 backfill 时相关。 如果设置此项,则创建操作仅会回填在该日期/时间之后引入的记录。 backfill 也必须设置为 true 。 应为此属性输入日期/时间文本,例如 effectiveDateTime=datetime(2019-05-01) 。 |
updateExtentsCreationTime | bool |
仅在使用 backfill 时相关。 如果此项设置为 true ,则会在回填过程中根据日期/时间分组依据键来分配区创建时间。 有关详细信息,请参阅回填具体化视图。 |
lookback | timespan |
仅对 arg_max /arg_min /take_any 具体化视图有效。 此属性限制需要重复项的时间段。 例如,如果在 arg_max 视图上指定了 6 小时的回溯,则新引入的记录与现有记录之间的重复数据删除将只考虑最长 6 小时前引入的记录。 回溯相对于 ingestion_time()。 如果具体化视图查询不保留 ingestion_time() 值,则无法对视图定义回溯。 请参阅具体化视图的限制和已知问题。 错误地定义回溯时段可能会导致具体化视图中出现重复项。 例如,如果一个特定键的记录在同一键的记录被引入 10 小时后引入,而回溯设置为 6 小时,则此键将是视图中的重复项。 在实现时和查询时将应用回溯时段。 |
autoUpdateSchema | bool |
是否根据源表更改自动更新视图。 默认值为 false 。 此选项仅对 arg_max(Timestamp, *) /arg_min(Timestamp, *) /take_any(*) 类型的视图(仅当列的参数为 * 时)有效。 如果将此选项设置为 true ,则对源表所做的更改会自动反映在具体化视图中。 |
dimensionTables | array | 一个动态参数,其中包含视图中维度表的数组。 请参阅查询参数。 |
文件夹 | string |
具体化视图的文件夹。 |
docString | string |
记录具体化视图的字符串。 |
allowMaterializedViewsWithoutRowLevelSecurity | bool |
允许在启用了行级安全策略的表上创建具体化视图。 |
现有表
如果表已存在,则 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 |
时间跨度,用于限制需要重复项的时间段。 |
示例
创建或更改具体化视图
以下命令创建新的或更改现有的名为 ArgMax 的具体化视图:
.create-or-alter materialized-view ArgMax on table T
{
T | summarize arg_max(Timestamp, *) by User
}
输出
名称 | SourceTable | 查询 | MaterializedTo | LastRun | LastRunResult | IsHealthy | IsEnabled | 文件夹 | DocString | AutoUpdateSchema | EffectiveDateTime | 回溯 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
ArgMax | T | T | summarize arg_max(Timestamp, *) by User | 2023-02-26T16:40:03.3345704Z | 2023-02-26T16:44:15.9033667Z | 已完成 | true | true | false | 2023-02-23T14:01:42.5172342Z |
备注
如果该具体化视图不存在,此命令的行为就与 .create 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 执行后处理的记录。