你当前正在访问 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=Tsum 列将包含部分数据。 此视图仅包含在 alter 执行后处理的记录。