Azure ADX跨同一集群上的数据库摄取数据



我想找到一种方法,根据源表何时更新,将数据从一个数据库摄取到另一个数据库(同一集群)。我们有一个能够跨数据库查看的更新查询,但是当我尝试使用

更新更新策略时:
.alter table DataBase2.ChildTable policy update
'''
[
{
"IsEnabled": true,
"Source": "DataBase1.SourceTable",
"Query": "QueryFunction()"
}
]
'''

这会产生以下错误:

Error during execution of a policy operation: Source table does not exist for policy: 'IsEnabled = 'True', Source = 'DataBase1.SourceTable', Query = 'QueryFunction()', IsTransactional = 'False', PropagateIngestionProperties = 'False''

有人有什么想法吗?

-谢谢!

所以我们找到了一个解决方案:

创建一个使用0时间保留策略摄取的源表命令:

.alter table SourceTableName policy retention 
'''
{
"SoftDeletePeriod": "0", "Recoverability":"Disabled"
}
'''

这将使表永远不会提交任何行。

接下来,对于每个更新策略,您需要按照如下方式构建它们:

.alter table Childtable policy update @'[{"Source": "SourceTableName", "Query": "UpdateQuery()", "IsEnabled": "True", "IsTransactional": "True"}]' 

这将使子表在它们被摄取时拉出这些行,但是这些行永远不会被提交到源表。就把它当成垫脚石吧。我建议使用另一个DB,它也从相同的源中摄取作为备份,允许您根据需要执行.appends(如果摄取失败)。从这里,您可以根据需要将RLS添加到子表中!

保留参考

RLS参考

在撰写本文时**,正如文档明确提到的那样-不可能将跨数据库查询作为更新策略的一部分。

您可以做的一件事是定期运行.set-or-append](https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/data-ingestion/ingest-from-query)命令来执行跨数据库摄取,同时利用数据库游标来保证数据只处理一次。

[**将来可能支持跨数据库更新策略]

最新更新