【问题标题】:Kusto: ingest from a queryKusto:从查询中摄取
【发布时间】:2020-05-08 19:19:03
【问题描述】:

大家好,

我目前正在尝试使用批处理操作来摄取数据。我的查询是这样写的:

.set-or-append tableName with (folder = "rocky")<|
let _Scope = () {
    let N = 4;
    range p from 0 to N-1 step 1
    | partition by p
    {
        functionName((list_of_ids()
        | where hash(something, N) == toscalar(p)), datetime(2020-05-03))
        | extend
            batch_num = toscalar(p)
    }
};
union (_Scope())

我想了解这是否会为每个分区并行运行或按顺序运行?如果并行,我怎样才能更好地优化它? .非常感谢任何帮助。

【问题讨论】:

  • 这实际上是在排队 N .set-or-append 操作吗?我很难看到如何。

标签: azure-data-explorer kql


【解决方案1】:

partition 运算符(您在函数中使用)允许您提供 hints 来控制并发:

https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/partitionoperator

无论如何,取决于 functionName() 的作用(原始问题中未提及),您可以考虑使用 distributed 选项:

https://docs.microsoft.com/en-us/azure/data-explorer/kusto/management/data-ingestion/ingest-from-query

当查询产生的数据量很大(超过 1GB 的数据)并且查询不需要序列化(以便多个节点可以并行产生输出)时,将 distributed 标志设置为 true 很有用.当查询结果很小时,不建议使用该标志,因为它可能会产生大量不必要的小数据分片。

【讨论】:

  • 感谢您的回复。如果我希望它以顺序方式运行怎么办?由于没有设置分布式标志,这是否已经发生?
  • 您希望在什么情况下按顺序运行它?您是否尝试实施某种“节流”或限制命令的资源利用率?
  • 是的。所以我猜当 N=5 时,相同的函数会在不同的分区上并行运行,我说的是一个分区完成,下一个分区开始执行。
  • 如果您坚持使用partition 运算符 - 如我的回复所示,您可以使用运算符支持的hints 控制并发。我建议您完全重新考虑您对partition 运算符的使用,看看您是否可以简单地使用.set-or-append 命令的distributed 选项(如我的回复中所述)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
  • 2022-08-17
相关资源
最近更新 更多