在更新策略处于活动状态时更新更新策略功能

时间:2021-07-27 12:48:47

标签: azure-data-explorer

假设我们有一个目标表 TargetTable,我们有 N 个不同的源表,例如 SourceTable1, SourceTable2,...,SourceTableN。现在让我们针对 TargetTable 定义一个更新策略,以便每个源表都通过此更新策略提供给目标表。常见的查询是一个固定的函数,叫做TargetTable_loader()。因此 .show table TargetTable policy update 命令的输出将如下所示:-

[
  {
    "IsEnabled": true,
    "Source": "SourceTable1",
    "Query": "TargetTable_loader()",
    "IsTransactional": true,
    "PropagateIngestionProperties": false
  },
  {
    "IsEnabled": true,
    "Source": "SourceTable2",
    "Query": "TargetTable_loader()",
    "IsTransactional": true,
    "PropagateIngestionProperties": false
  },
.
.
.
.
  {
    "IsEnabled": true,
    "Source": "SourceTableN",
    "Query": "TargetTable_loader()",
    "IsTransactional": true,
    "PropagateIngestionProperties": false
  }

]

现在,对于这种情况,我有以下两个问题。

  1. 由于它是所有 (Source,Target) 对的通用函数,有没有办法让函数使用一些通用变量来引用输入表?因为如果函数引用特定的表名,它将不再是通用的。同时,如果我必须创建 N 个不同的函数,每个函数都将引用不同的源表,这将是多余的。有没有办法用输入表名参数化这个函数?像这样:-

    .create-or-alter function TargetTable_loader(InputTable:string) { InputTable | ..... }

  2. 其次,如果我有这样一个通用函数来将所有源表映射到目标表,如初始示例中所示 - 并且说数据正在使用流连续摄取到所有源表中,那么会发生什么?如果我突然更新通用函数的定义会发生什么?当然,我会确保即使是新的函数定义也是有效的。但是我的问题更集中在用于查询这N个更新策略的函数的突然更新是否会影响更新策略的执行,导致失败仅仅因为它是突然更新的事实。

1 个答案:

答案 0 :(得分:2)

答案:

  1. 您可以定义一个接收表名作为字符串参数的函数,然后像这样引用它table(tableName)
.create-or-alter function MyFunction(TableName: string) {
    table(TableName)
    | ...
}
  1. 更新用于更新策略的函数不会导致失败(只要结果架构保持不变)。