Лучший подход для развертывания таблиц в хранилище таблиц
Дайте мне знать, каков наилучший способ развертывания хранилища таблиц, так как моя команда разработчиков спрашивает, что у них много таблиц, в каждой из которых тысячи записей. Поэтому они просят меня проконсультироваться с любой командой Microsoft или блогерам, чтобы проверить лучший способ развертывания хранилища таблиц. У вас есть идея, как мы можем это сделать, так как скрипты будут выполнять удаление и вставку тысячи записей каждый раз.
есть ли у нас какой-либо дельта-подход, как если бы он сначала проверял все записи в таблицах, и, если они существуют, он должен просто добавлять вновь добавленные записи, которые добавляются в файлы csv командой разработчиков, только те записи, которые нам нужно обновить, в хранилище таблиц. Это один из подходов. У вас есть лучший подход. Пожалуйста, помогите мне.
1 ответ
В классе TableBatchOperation есть метод InsertOrReplace(ITableEntity), который может выполнять пакетную операцию с помощью метода ExecuteBatch, попробуйте его с этим кодом:
param(
[object[]]$fileObj
)
$storageAccountName = "XXX"
$tableName="XXX"
# Get the storage key for the storage account
$StorageAccountKey = "XXX"
# Get a storage context
$ctx = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
foreach($fo in $fileObj){
Write-Host $fo.filepath
$csv = Import-CSV $fo.filepath
$cArray=$fo.Cols.split(",")
$table = Get-AzureStorageTable -Name $fo.tableName -Context $ctx -ErrorAction Ignore
[Microsoft.WindowsAzure.Storage.Table.TableBatchOperation]$batchOperation = New-Object -TypeName Microsoft.WindowsAzure.Storage.Table.TableBatchOperation
if($table)
{
Write-Host "table not null"
}
else
{
Write-Host "table is null"
}
if($table.CloudTable)
{
Write-Host "CloudTable not null"
}
else
{
Write-Host "CloudTable is null"
}
foreach($line in $csv)
{
Write-Host "$($line.partitionkey), $($line.rowKey)"
$entity = New-Object -TypeName Microsoft.WindowsAzure.Storage.Table.DynamicTableEntity -ArgumentList $line.partitionkey, $line.rowKey
foreach($c in $cArray){
Write-Host "$c,$($line.$c)"
$entity.Properties.Add($c,$line.$c)
$batchOperation.Insert($entity)
}
}
if($batchOperation)
{
Write-Host "batchOperation not null"
}
else
{
Write-Host "batchOperation is null"
}
$table.CloudTable.ExecuteBatch($batchOperation)
}