base
表。
.create table base (info:dynamic)
dynamic
表的{base
列并抓取几列,并在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
表中。进一步调查
答案 0 :(得分:0)
在这种情况下,您的源数据不能“没有”由其架构定义的列。 如果某行中某列未提取任何值,则那里将显示空值,并且更新策略不会失败。
如果原始表行没有足够的列,则更新策略将中断。当前,此类错误的源数据不会作为故障消息的一部分发出。
通常,仅当您从Blob提取数据时,源URI才有用。在其他情况下,失败的提取信息中显示的URI是动态创建的内部Blob上的URI,没有人可以访问。
但是,文档中缺少一个命令(我们将确保对其进行更新),该命令允许您将下一次错误提取的源数据复制(转储到提供的存储容器中)到特定表中。 / p>
语法为: .dup-next-failed-estest到TableName中以h @'Azure blob容器的路径'
此处,Azure Blob容器的路径必须包含可写SAS。 运行此命令所需的权限是数据库管理员。