我得到下面的錯誤,而試圖插入Azure Table中存儲多個實體: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();
}
}
}
以上代碼工作正常,如果我將分配batchSize值爲10,但如果我將分配給1000或100它會拋出錯誤的請求錯誤。
請幫我解決這個錯誤。我正在使用Spring引導和Azure存儲Java SDK 4.3.0版。
通常400錯誤意味着您的某個屬性的值有問題。找出的一種方法是通過Fiddler跟蹤請求/響應並查看正在發送的實際數據。有可能有一些數據類型不匹配。 – Aravind
e.RequestInformation.HttpStatusMessage將爲您提供失敗的確切原因 – yonisha
@Aravind我認爲數據是正確的,因爲我可以通過設置batchSize = 10來插入相同的數據。 – Sunil