由于 Microsoft.Azure.Cosmos.Table SDK 已被弃用,我正在将所有 Azure 表存储功能升级到 Azure.Data.Tables 库。
我使用 Cosmos 包中的代码轻松加载了批量数据。
try {
var pks = entities.Select(x => x.PartitionKey).Distinct().ToList();
foreach (var pk in pks) {
await AddSymbolIfNotExistOrUpdateLastRecordDateAsync(pk, entities[0].RowKey);
var records = entities.Where(x => x.PartitionKey == pk).Distinct().ToList(); // partition key is the symbol
var batches = records.Batch(100); //batching max value is 100
completionMessage.Append($" A storage batch started for {records.Count} {pk} records into the table: {tableName} ");
#region BATCH JOB
//Iterating through each batch
foreach (var block in batches) {
var batchOperationObj = new TableBatchOperation();
foreach (var record in block) {
batchOperationObj.InsertOrReplace(record);
}
try {
var worked = await table?.ExecuteBatchAsync(batchOperationObj)! != null;
if (worked) {
batchResponse.NumberOfRecordsProcessed += batchOperationObj.Count;
batchOperationObj.Clear();
}
} // rest removed for brevity
我找不到任何方法、示例或教程来展示如何使用此 SDK 插入批次。有没有可能无法使用它?对于单一实体只有 Add 方法。
任何想法都值得赞赏,因为我一次加载数千条记录,只是无法想象通过迭代进行是唯一的方法。
TableTransactionAction
将实体添加到批次中,然后调用 TableClient.SubmitTransactionAsync
将实体保存在批次中。
这是伪代码:
TableClient client = new TableClient(new Uri(""));
var transactionActions = new List<TableTransactionAction>()
{
new TableTransactionAction(TableTransactionActionType.Add, new TableEntity("pk", "rk1")),
new TableTransactionAction(TableTransactionActionType.Add, new TableEntity("pk", "rk2")),
new TableTransactionAction(TableTransactionActionType.Add, new TableEntity("pk", "rk3")),
new TableTransactionAction(TableTransactionActionType.Add, new TableEntity("pk", "rk4")),
new TableTransactionAction(TableTransactionActionType.Add, new TableEntity("pk", "rk5")),
};
client.SubmitTransactionAsync(transactionActions);