【问题标题】:Getting "Entity already exists" error writing aggregates to Azure Table Storage (with Azure Function)将聚合写入 Azure 表存储(使用 Azure 函数)时出现“实体已存在”错误
【发布时间】:2017-01-20 16:10:41
【问题描述】:

在 Azure 函数中,我正在尝试聚合一些数据并将聚合写入表中。

我有一个汇总数据的查询:

var query = recs
            .GroupBy(r => new { r.Category, r.Account, r.Record })
            .Select(r => new ts_webhitaggregate_account
                    {
                        PartitionKey = partition,  // Constant
                        RowKey = $"{r.Key.Category}:{r.Key.Account}:{r.Key.Record}", // Group By 
                        rawDate = intervaldate,   // Constant
                        epochDate = intervalepoch, // Constant
                        Category = r.Key.Category, // Group By 
                        Account = r.Key.Account, // Group By 
                        Record = r.Key.Record, // Group By 
                        Hits = r.Count(), // Aggregate
                        Users = r.Select(t => t.User).Distinct().Count(), // Aggregate
                        Devices = r.Select(t => t.Device).Distinct().Count() // Aggregate
                    });

然后我尝试将这些记录传递给 ICollector 绑定表

foreach (ts_webhitaggregate_account a in query.ToList())
{
    webhitsAggAccount.Add(a);
}

我经常遇到“实体已存在”错误,例如:

调用的目标已抛出异常。 Microsoft.WindowsAzure.Storage: 82: 指定的实体已经存在。

如果我正在编写与 C# 类似的 SQL 语句,我不会期望复合键的重复是可能的,因为写入的每个值都是键、常量或聚合。我在表中也没有可能导致冲突的预先存在的数据。

在查询中生成重复项我做错了什么?

【问题讨论】:

    标签: c# azure-table-storage azure-functions


    【解决方案1】:

    我相信我发现我愚蠢的地方......这些发生在类别的循环中,我应该每次都选择一个类别,但是行键上的一个范围选择包括另一个类别,然后继续被选中,两次插入第二类。

    如有疑问,请将所有内容打印到控制台!

    【讨论】:

      【解决方案2】:

      错误信息告诉我们一个实体已经存在。据我所知,该集合似乎有一个具有相同 PartitionKey 和 RowKey 的实体。请尝试使用insert or update method 看看它是否可以为您提供帮助。

      【讨论】:

      • 抱歉 Jambor 但这意味着要编写更多代码,因为 Azure Functions 无法使用开箱即用的方法 afaik。我预计生成要插入的项目的代码存在问题 - 看起来它应该只生成要插入给我的唯一行
      • 另外,fwiw ...我确实写了一个批处理 InsertOrReplace 方法,它发生了同样的错误,所以我认为问题是我如何生成要插入的东西
      【解决方案3】:

      只是一个旁注,可能对您调试有帮助。在您粘贴的错误消息中“82:指定的实体已存在”。数字 82 是批处理操作中有问题(重复)项的索引。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-15
        • 2018-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-18
        相关资源
        最近更新 更多