- 我在 ADX Kusto DB 中有一个
base
表。
.create table base (info:dynamic)
- 我编写了一个函数,该函数解析(
dynamic
列(base
表并 grep 几列,并在base
表获取数据(从 EventHub(时将其存储在另一个表中。以下函数及其更新策略
.create function extractBase() { base | evaluate bag_unpack(info) | project tostring(column1), toreal(column2), toint(column3), todynamic(column4) } .alter table target_table policy update @'[{"IsEnabled": true, "Source": "base", "Query": "extractBase()", "IsTransactional": false, "PropagateIngestionProperties": true}]'
假设如果base
表不包含预期的列,则会发生引入错误。 如何获取失败的源(行(? 使用.show ingestion failures
时,它会显示失败消息。有一列叫做IngestionSourcePath
.当我浏览 URL 时,收到异常作为Resource Not Found
.
如果发生摄取失败,我需要将base
表的特定行存储到IngestionFailure
表中。 用于进一步调查
在这种情况下,源数据不能"没有"由其架构定义的列。 如果未为某行中的某些列引入任何值,则此处将出现 null 值,并且更新策略不会失败。
在这里,如果原始表行不包含足够的列,更新策略将中断。目前,此类错误的源数据不会作为失败消息的一部分发出。
通常,源 URI 仅在从 Blob 引入数据时才有用。在其他情况下,失败的引入信息中显示的 URI 是动态创建的内部 Blob 上的 URI,没有人有权访问。
但是,文档中缺少一个命令(我们将确保对其进行更新(,该命令允许您将下一次失败引入的源数据复制到(转储到您提供的存储容器(到特定表中。
语法为: .dup-next-failed-ingest to TableName to h@'Path to Azure blob container'
此处,Azure Blob 容器的路径必须包含可写 SAS。 运行此命令所需的权限是数据库管理员。