假设我们有一个目标表 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个更新策略的函数的突然更新是否会影响更新策略的执行,导致失败仅仅因为它是突然更新的事实。
答案 0 :(得分:2)
答案:
table(tableName)
:.create-or-alter function MyFunction(TableName: string) {
table(TableName)
| ...
}