PRAVEEN PDBR
PRAVEEN PDBR

Reputation: 583

Error while deploying the tables using powershell script into Azure table storage

I am running the below script and passing the script parameters for the $fileObj through powershell script using arguments section in VSTS powershell task.I am trying to deploy table data into Azure table storage. I have table data in .csv files and I am trying to deploy those table entities using powershell script and deploying into azure table storage.The below script is not deploying the table entities and failing with error. Could any one please help me out. I have attached the error log in onedrive location: https://onedrive.live.com/?authkey=%21AEh2aAOnbmuzq9U&cid=5599285D52BD31F3&id=5599285D52BD31F3%21900&parId=root&action=locate

foreach($fo in $fileObj){
 Write-Host $fo.filepath
 $csv = Import-CSV $fo.filepath
  $cArray=$fo.Cols.split(",")
  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)
 }
 $result = $table.CloudTable.Execute([Microsoft.WindowsAzure.Storage.Table.TableOperation]::Insert($entity))
 }
}

$subscriptionName = ""
$resourceGroupName = ""
$storageAccountName = ""
$location = ""

# Get the storage key for the storage account
$StorageAccountKey = ""

# Get a storage context
$ctx = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey

Upvotes: 0

Views: 515

Answers (1)

Tom Sun
Tom Sun

Reputation: 24569

According to your mentioned log, I find that it seems that your csv column name is not corresponding to your code. And your CSV file format with 2 Colunms named Partitionkey and Rowkey is not correct. Please have a try to use the following demo code and csv file format. It works correctly on myside.

$resourceGroup ="resourceGroup name"
$storageAccount = "storage account Name"
$tableName = "table name"
$storageAccountKey = "storage key"
$ctx = New-AzureStorageContext -StorageAccountName $storageAccount -
StorageAccountKey $storageAccountKey 

######### Add removing table and create table code #######
try
{
    Write-Host "Start to remove table $tableName, please wait a moment..."

    Remove-AzureStorageTable -Name $tableName -Context $ctx -Force # Remove the Azure table

    Start-Sleep -Seconds 60 # waiting for removing table, you could change it according to your table 

    Write-Host "$tableName table has been removed"
}
catch
{
   Write-Host "$tableName is not existing"
}
Write-Host "Start to create $tableName table"

New-AzureStorageTable -Name  $tableName -Context $ctx  # Create new azure storage table

##########Add removing table and create table code ############

$table = Get-AzureStorageTable -Name $tableName -Context $ctx 
$csvPath ='csv file path'
$cols = "Label_Usage,Label_Value,Usage_Location" #should be corrensponding to your csv column exclude Partitionkey and RowKey
$csv = Import-Csv -Path $csvPath
$number = 0
[Microsoft.WindowsAzure.Storage.Table.TableBatchOperation]$batchOperation = New-Object -TypeName Microsoft.WindowsAzure.Storage.Table.TableBatchOperation
foreach($line in $csv)
{ 
     $number++
     $entity = New-Object -TypeName Microsoft.WindowsAzure.Storage.Table.DynamicTableEntity -ArgumentList $line.partitionkey, $line.rowKey 
     $colArray = $cols.split(",")
     Write-Host "$($line.partitionkey), $($line.rowKey)" #output partitionkey and rowKey value
     foreach($colName in $colArray)
     {
         Write-Host "$colName,$($line.$colName)" #output column name and value
        $entity.Properties.Add($colName,$line.$colName)
     }
    if($number -le 100)
    {
        $batchOperation.InsertOrReplace($entity) # Changed code
    }
    else
    {   $number =0
        $result = $table.CloudTable.ExecuteBatch($batchOperation)
   [Microsoft.WindowsAzure.Storage.Table.TableBatchOperation]$batchOperation = New-Object -TypeName Microsoft.WindowsAzure.Storage.Table.TableBatchOperation
    }
}
if($batchOperation.Count -ne 0)
{
 $result = $table.CloudTable.ExecuteBatch($batchOperation)
}

Note: For batch operation requires records in the CSV file with the same partition key value.


csv file example format

enter image description here

Test Result:

enter image description here

Upvotes: 0

Related Questions