Azureのテーブルストレージに複数のエンティティを挿入しようとしたときに、私は、エラーの下に取得しています:Azureのバッチ挿入:不正な要求エラー
以下com.microsoft.azure.storage.table.TableServiceException: Bad Request
at com.microsoft.azure.storage.table.TableBatchOperation$1.postProcessResponse(TableBatchOperation.java:525)
at com.microsoft.azure.storage.table.TableBatchOperation$1.postProcessResponse(TableBatchOperation.java:433)
at com.microsoft.azure.storage.core.ExecutionEngine.executeWithRetry(ExecutionEngine.java:146)
は、バッチ挿入のためのJavaコードです:
以上public BatchInsertResponse batchInsert(BatchInsertRequest request){
BatchInsertResponse response = new BatchInsertResponse();
String erpName = request.getErpName();
HashMap<String,List<TableEntity>> tableNameToEntityMap = request.getTableNameToEntityMap();
HashMap<String,List<TableEntity>> errorMap = new HashMap<String,List<TableEntity>>();
HashMap<String,List<TableEntity>> successMap = new HashMap<String,List<TableEntity>>();;
CloudTable cloudTable=null;
for (Map.Entry<String, List<TableEntity>> entry : tableNameToEntityMap.entrySet()){
try {
cloudTable = azureStorage.getTable(entry.getKey());
} catch (Exception e) {
e.printStackTrace();
}
// Define a batch operation.
TableBatchOperation batchOperation = new TableBatchOperation();
List<TableEntity> value = entry.getValue();
for (int i = 0; i < value.size(); i++) {
TableEntity entity = value.get(i) ;
batchOperation.insertOrReplace(entity);
if (i!=0 && i % batchSize == 0) {
try {
cloudTable.execute(batchOperation);
batchOperation.clear();
} catch (Exception e) {
e.printStackTrace();
}
}
}
try {
cloudTable.execute(batchOperation);
} catch (Exception e) {
e.printStackTrace();
}
}
}
バッチサイズの値を10に割り当てるとコードが正常に動作していますが、1000または100に割り当てるとバッドリクエストエラーがスローされます。
このエラーを解決するのを手伝ってください。私はSpringブートとAzureストレージJava SDKバージョン4.3.0を使用しています。
一般に、400エラーは、プロパティの1つの値に問題があることを意味します。調べる1つの方法は、Fiddlerを介してリクエスト/レスポンスをトレースし、送信されている実際のデータを確認することです。データ型の不一致がある可能性があります。 – Aravind
e.RequestInformation.HttpStatusMessageはエラーの正確な理由を提供します – yonisha
@Aravind私はbatchSize = 10を設定して同じデータを挿入できるため、データが正しいと思います。 – Sunil