有没有办法在 Kusto Data .Net 库中流式传输结果?

Is there a way to stream results in Kusto Data .Net library?

我们有一个 .Net 应用程序,它从 Kusto 获取巨大的结果集(5,000,000 多行),在内存中处理,并将它们加载到 Azure Cosmos DB 中。

我们正在使用 IDataReader 来避免同时将所有数据加载到内存中。 但是,我们发现在从IDataReader读取第一条记录之前,所有的结果都已经加载到内存中了。 有没有办法对结果数据集进行真正的流式传输?

using (ICslQueryProviderclient = KustoClientFactory.CreateCslQueryProvider(connectionString))
{
    string query = @;
    client.ExecuteQuery("PageViewEvents | // some aggregation logic...", new ClientRequestProperties());
    // At this point, all results have already been loaded to memory. That takes 2GB memory!
    while (reader.Read())
    {
        // Load current record to Azure Cosmos DB
    }
}
  1. 您可能想尝试将 streaming 属性 指定为连接字符串的一部分:https://docs.microsoft.com/en-us/azure/kusto/api/connection-strings/kusto#client-communication-properties
  2. 将 5M(原始?)记录从 Kusto/ADX 导出到 CosmosDB - 用例是什么?您 运行 analytics/aggregations 正在处理 CosmosDB 中的这些数据吗?
    • 您可以考虑在导出到 CosmosDB 之前在 Kusto 查询中执行额外的 filtering/aggregation(同样,取决于您的用例)
    • 如果出于某种原因,streaming 选项对您没有帮助,您可以 'split' 将您当前的单个查询分为多个查询(根据数据中的特定列,例如datetime 列,或 ingestion_time(),或使用 hash())