【问题标题】:Updating Update Policy function while Update Policy is active在更新策略处于活动状态时更新更新策略功能
【发布时间】:2021-07-27 21:18:55
【问题描述】:

假设我们有一个目标表 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 个更新策略,是否会影响更新策略的执行,导致失败仅仅是因为它是突然更新的事实。

【问题讨论】:

    标签: azure-data-explorer


    【解决方案1】:

    答案:

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

    【讨论】:

    • 如果您回答 #1 ,我想知道更新策略的定义如何,以便 Kusto 自动将 TableName 作为参数传递给函数?因为在更新策略的情况下,我们没有显式调用该函数,它是由 Kusto 调用的。会是这个样子吗? "查询": "TargetTable_loader(table(TableName))"
    • 在您作为更新策略的一部分提供的查询中,您应该写YourFunctionName("YourTableName")
    猜你喜欢
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    相关资源
    最近更新 更多