2017-01-20 6 views
0

Azure関数では、一部のデータを集計して集計をテーブルに書き込もうとしています。Azureテーブルストレージ(Azure関数付き)に集計を書き込む際に「Entity already exists」エラーが発生する

私はデータをまとめたもので、クエリがあります。

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); 
} 

にこれらのレコードを渡そうとしますlike:

呼び出しの対象によって例外がスローされました。 Microsoft.WindowsAzure.Storage:82:指定されたエンティティは既に存在します。

私がC#に匹敵するSQL文を書いていたのであれば、書き込まれるすべての値がキー、定数、または集約であるため、複合キーの複製が可能であるとは思っていませんでした。私はまた、紛争の原因となる可能性のある既存のデータをテーブルに持っていません。

クエリで重複を生成するにはどうしたらよいですか?

答えて

1

私は愚かなところで見つけたと信じています...これらはカテゴリのループ内で起こり、毎回単一のカテゴリを選択していたはずですが、行キーの1つの範囲選択には2つ目のカテゴリに2回挿入されました。

疑問がある場合は、コンソールにすべてを印刷してください!

0

エラーメッセージは、すでに存在するエンティティを示しています。私が知っているように、コレクションには、同じPartitionKeyとRowKeyを持つエンティティがあるようです。 insert or update methodを使って助けてもらえるかどうか確認してください。

+0

申し訳ありませんが、これは、Azure関数がそのメソッドをafaikのまま使用することはできないため、より多くのコードを書くことを意味します。私はコードを挿入するアイテムを生成する問題があると思う - それは私に挿入するユニークな行を生成する必要があるように見える –

+0

また、fwiw ...私はバッチInsertOrReplaceメソッドを書いて、それは起こっている同じエラーがあっただから私は、挿入するものをどのように生成するのかという問題を考えました –

0

ちょっとしたコメントがあり、デバッグに役立つかもしれません。 "82:指定されたエンティティは既に存在します。"というエラーメッセージが貼り付けられました。番号82は、バッチ操作で問題のある(重複している)項目のインデックスです。

関連する問題