This is a http trigger function written in C# - .NET Core 3.1. It processed a csv file and store the data on Cosmos DB
GitHub repo : https://github.com/hansamaligamage/fncsvdatastore
public static async Task<CloudTable> CreateTableAsync(string tableName)
{
CloudTable table;
string storageConnectionString = LoadConnectionDetails();
CloudStorageAccount storageAccount = RetieveStorageAccount(storageConnectionString);
CloudTableClient tableClient = storageAccount.CreateCloudTableClient(new TableClientConfiguration());
Console.WriteLine("Table client is created");
try
{
table = tableClient.GetTableReference(tableName);
if (await table.CreateIfNotExistsAsync())
{
Console.WriteLine("Table is created - {0}", tableName);
}
else
{
Console.WriteLine("Table {0} already exists", tableName);
}
}
catch (Exception ex)
{
throw ex;
}
Console.WriteLine();
return table;
}
GitHub repo : https://github.com/hansamaligamage/fncsvdatastore
Technology stack
- .NET Core 3.1 on Visual Studio 2019
- Azure functions v3 and Azure Cosmos DB table API
Some code snippets
Retrieve the database storage account
public static CloudStorageAccount RetieveStorageAccount(string storageConnectionString)
{
CloudStorageAccount storageAccount;
try
{
storageAccount = CloudStorageAccount.Parse(storageConnectionString);
}
catch (FormatException)
{
Console.WriteLine("Invalid storage account information provided");
throw;
}
catch (ArgumentException)
{
Console.WriteLine("Please check the storage account details");
Console.ReadLine();
throw;
}
catch(Exception ex)
{
throw ex;
}
return storageAccount;
}
Create a table in Cosmos DB
public static string LoadConnectionDetails()
{
return Environment.GetEnvironmentVariable("StorageConnectionString");
}
public static async Task<CloudTable> CreateTableAsync(string tableName)
{
CloudTable table;
string storageConnectionString = LoadConnectionDetails();
CloudStorageAccount storageAccount = RetieveStorageAccount(storageConnectionString);
CloudTableClient tableClient = storageAccount.CreateCloudTableClient(new TableClientConfiguration());
Console.WriteLine("Table client is created");
try
{
table = tableClient.GetTableReference(tableName);
if (await table.CreateIfNotExistsAsync())
{
Console.WriteLine("Table is created - {0}", tableName);
}
else
{
Console.WriteLine("Table {0} already exists", tableName);
}
}
catch (Exception ex)
{
throw ex;
}
Console.WriteLine();
return table;
}
Create a row in the Cosmos DB
public static async Task InsertOrUpdateEntityAsync(CloudTable table, Session session)
{
if (session == null)
{
throw new ArgumentNullException("Session is empty");
}
try
{
TableOperation tableOperation = TableOperation.InsertOrMerge(session);
TableResult result = await table.ExecuteAsync(tableOperation);
Session newSession = result.Result as Session;
if (result.RequestCharge.HasValue)
{
Console.WriteLine("Request Charge of the operation: " + result.RequestCharge);
}
return newSession;
}
catch (StorageException e)
{
Console.WriteLine(e.Message);
Console.ReadLine();
throw;
}
catch (Exception ex)
{
throw ex;
}
}
Read a row in the Cosmos DB
public static async Task RetrieveEntityAsync(CloudTable table, string partitionKey, string rowKey)
{
try
{
TableOperation tableOperation = TableOperation.Retrieve(partitionKey, rowKey);
TableResult result = await table.ExecuteAsync(tableOperation);
Session session = result.Result as Session;
if (session != null)
{
Console.WriteLine("\t{0}\t{1}\t{2}\t{3}", session.PartitionKey, session.RowKey, session.Points, session.IsWeekend);
}
if (result.RequestCharge.HasValue)
{
Console.WriteLine("Request Charge of Retrieve Operation: " + result.RequestCharge);
}
return session;
}
catch (StorageException e)
{
Console.WriteLine(e.Message);
Console.ReadLine();
throw;
}
catch (Exception ex)
{
throw ex;
}
}