如何解决为什么Azure数据资源管理器中的更新策略适用于源表的扩展数据块组合?我们可以限制一次运行一次吗?
我们正在使用的更新策略中的查询存在一个局限性,即它只能在少量行上正常运行。适当控制对该源表的摄取速率。此外,已编辑分片策略以仅允许有限的rowCount。但是,一次将更新策略应用于多个扩展区时,更新将开始失败。
Failed to invoke update policy. Target Table = 'settings',Query = 'let raw_config3 =
__table("raw_config3",'All','AllButRowStore')
| where extent_id() in (guid(58b4a126-8ff2-4c04-a8f8-d6be2629c865),guid(10d66fec-5146-4d63-b3db-d15ba52244b9),guid(8bc99805-9dcd-43ed-8133-402ba77eb566),guid(8127f67e-8d20-4096-bf46-f3736c77ecd5));
getBiosSettings()': Semantic error: 'let raw_config3 =
__table("raw_config3",guid(8127f67e-8d20-4096-bf46-f3736c77ecd5));
getBiosSettings()' has the following semantic error: SEM0100: 'summarize' operator: Failed to resolve scalar expression named 'Path'.
在合并范围上应用更新策略是否是预期的方案?可以用任何方式配置吗?
编辑1- 在我们要实现的目标上添加一些上下文。 我们将多级xml数据转储为源表中的单个字段。更新策略使用查询从该字段中提取一些信息,并将其存储为目标表中的单独行。由于xml数据深度很深,并且包含数组字段,因此我们需要在上述查询中使用mv expand和bag unpack。当输入数据大于一定数量时,此操作将中断。
试图使用MaxRowCount限制源表的扩展区大小。但是,更新策略将查询同时应用于多个范围。有没有办法配置这种行为?
编辑2 --------------------------------------------- -------------------
我的理解是,对于源表的某些更新,应一次应用更新策略。我的看法却有所不同。解释场景的再现-
有一个源表“ Source”,我们每隔10分钟以5个条目的批次提取数据。有一个配置为仅将其复制到名为Target的目标表的更新策略。并且有一个更新策略来记录该策略每次运行的数据计数,并且该数据存储在Target2中。
鉴于我们每10分钟发送相同数量的数据,我的期望是在Target2中看到恒定的值,对于我们发送的每一行,我希望在Target中有一条记录。
设置命令-
.create table Source(Turn : string,Batch: string,Data: string )
.create table Target(Turn : string,Data: string )
.create table Target2(Count: long )
.create function copySource(){ Source }
.alter table Target policy update
@'[{"IsEnabled": true,"Source": "Source","Query": "copySource()","IsTransactional": false}]'
.create function copySourceWithCount() { Source | count }
.alter table Target2 policy update
@'[{"IsEnabled": true,"Query": "copySourceWithCount()","IsTransactional": false}]'
运行更新策略的记录数一直在定期增加,而不是保持不变-
Target2
| extend ingestion_time()
| order by $IngestionTime asc
Count $IngestionTime
5 2020-09-27T10:03:50.3236393Z
10 2020-09-27T10:26:52.8994856Z
15 2020-09-27T10:37:04.2836551Z
20 2020-09-27T10:47:05.638047Z
每次提取到源表时,目标表中的记录数也在不断变化。较早提取的数据在目标表中出现的次数更高-
Target
| summarize count() by Turn,Batch,Data
| where Turn contains "b"
| order by count_ desc
Turn Batch Data Count
b 0 0 5
b 0 1 5
b 0 2 5
b 0 3 5
b 0 4 5
b 1 0 4
b 1 1 4
b 1 2 4
b 1 3 4
b 1 4 4
b 2 0 3
b 2 1 3
b 2 2 3
b 2 3 3
b 2 4 3
b 3 0 2
b 3 1 2
b 3 2 2
b 3 3 2
b 3 4 2
b 4 0 1
b 4 1 1
b 4 2 1
b 4 3 1
b 4 4 1
由此看来,更新策略多次对相同的数据运行。这是预期的吗?
解决方法
更新策略对通过单个提取操作提取的一批数据运行。
- 取决于该批次中的记录数量以及有效分片策略中
MaxRowCount
属性的值。 - 该批次可能跨越1个以上的数据碎片(范围)。
- 但是,除非您的查询假设输入范围的数量(不应该这样),否则不会导致任何失败。
乍看之下,原始消息中显示的语义错误与源范围的数量无关,而与查询本身有关-Failed to resolve scalar expression named 'Path'.
。
- 如果您可以共享失败的活动ID和名为
getBiosSettings()
的函数的内容,我们也许可以帮助您找出实际的根本原因。
如Yoni所写,您收到的错误与以下事实无关:将多个扩展数据集作为更新策略的一部分进行处理。
错误显示'summarize' operator: Failed to resolve scalar expression named 'Path'
。根据我对您的问题的理解,有时会收到此错误,有时却不会。这意味着查询的架构不是确定性的,因为查询中包含evaluate pivot
,evaluate bag_unpack
或类似内容,并且在某些情况下不会产生Path
列。 / p>
如果这与所提取的数据有关,则必须对其进行修复。
但是,如果预计有时Path列将不存在,则可以使用column_ifexists(Path,"DefaultValue")
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。