Kusto:如何将大型表查询为块来导出数据



如何构建Kusto查询,以便查询大表(并下载它(,同时避免内存问题,如:https://learn.microsoft.com/en-us/azure/data-explorer/kusto/concepts/querylimits#limit-关于结果集大小的结果截断

set notruncation;只适用于Kusto集群不运行OOM的情况,在我的情况下,它确实运行OOM。

我在这里没有找到答案:如何在Kusto explorer中查询大型结果集?,有用的

我尝试过的:

  1. 使用.export命令对我来说失败了,原因尚不清楚。也许你需要成为集群管理员才能运行这样的命令?https://learn.microsoft.com/en-us/azure/data-explorer/kusto/management/data-export/export-data-to-storage

  2. 循环浏览行号,但运行n次,你不会得到正确的答案,因为结果不一样,就像这样:

let start = 3000000;
let end = 4000000;
table
| serialize rn = row_number()
| where rn between(start..end)
| project col_interest;

"设置notrunation";是而不是主要是为了防止内存不足错误,但为了避免为可能在没有过滤器的情况下运行查询的可疑客户端通过网络传输过多数据。

&";。"出口";使用简单格式如";TSV";(无压缩(在我的经验中产生了最好的结果(与使用用于正常查询的相同客户端相比,在极短的时间内产生了数十亿条记录/Trabytes的数据(。

使用";。出口";?语法非常简单,先测试几行:

.export to tsv (
h@"https://SANAME.blob.core.windows.net/CONTAINER/PATH;SAKEY"
) with (
includeHeaders="all"
)
<| simple QUERY | limit 5

您不想在的同一时间通过运行低效查询(如示例中的大表上的序列化(尝试通过连接将结果在单个转储中移动到客户端来重载集群。

首先尝试使用Kusto Explorer客户端的";查询分析器";直到CPU和/或内存使用率尽可能低(理想情况下为100%的缓存命中率;您也可以临时扩大集群以将数据集放入内存(。

您也可以批量运行查询(首先尝试使用时间过滤器,因为这是一个时间序列引擎(,并将每个批次保存到";输出";表(使用".set或append"(,通过这种方式,您首先使用集群来处理数据集,然后导出完整的";输出";表放入外部存储器。

如果出于某种原因,您绝大多数情况下都使用相同的客户端来运行查询,并且消耗(大(结果,请尝试使用数据库游标而不是序列化整个表,这是相同的想法,但是预先计算的,因此您可以使用"极限XX";其中";XX";是您可以通过网络移动到客户端的最大数据集,因此您可以反复移动光标运行相同的查询,直到您完成整个数据集的移动:

最新更新