【发布时间】: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
}
]
现在,关于这种情况,我有以下两个问题。
-
由于它是所有 (Source,Target) 对的通用函数,有没有办法让该函数使用一些通用变量来引用输入表?因为如果函数引用了一个特定的表名,它就不再是通用的了。同时,如果我必须创建 N 个不同的函数,每个函数将引用不同的源表,那将是多余的。有没有办法用输入表名参数化这个函数?像这样的东西:-
.create-or-alter function TargetTable_loader(InputTable:string) { InputTable | ..... } -
其次,如果我有这样一个通用函数来将所有源表映射到目标表,如最初的示例所示——并且假设数据正在使用流式传输不断地摄取到所有源表中,如果我这样做会发生什么?突然更新通用功能的定义?当然,我会确保即使是新的函数定义也是有效的。但我的问题更集中于函数的突然更新,它被用作查询这 N 个更新策略,是否会影响更新策略的执行,导致失败仅仅是因为它是突然更新的事实。
【问题讨论】: