微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么Azure数据资源管理器中的更新策略适用于源表的扩展数据块组合?我们可以限制一次运行一次吗?

如何解决为什么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 pivotevaluate bag_unpack或类似内容,并且在某些情况下不会产生Path列。 / p>

如果这与所提取的数据有关,则必须对其进行修复。 但是,如果预计有时Path列将不存在,则可以使用column_ifexists(Path,"DefaultValue")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?