使用 Azure.Data.Tables SDK 在 Azure 表存储中批量插入似乎不可行

问题描述 投票:0回答:1

由于 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 方法。

任何想法都值得赞赏,因为我一次加载数千条记录,只是无法想象通过迭代进行是唯一的方法。

c# azure azure-table-storage azure.data.tables
1个回答
0
投票

这当然是可能的。您只需使用

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);
© www.soinside.com 2019 - 2024. All rights reserved.