tableHelper.cs 4.26 KB
using Google.Cloud.Bigtable.Admin.V2;
using System;
using System.Collections.Generic;
using System.Text;

namespace Google.Cloud.Bigtable.ScanTest
{
    class tableHelper
    {
        private AppSettings _appSettings { get; set; }
        private BigtableTableAdminClient _adminClient;
        private V2.TableName _table;

        public tableHelper()
        {
            this._appSettings = Program.AppSetting;
            _adminClient = BigtableTableAdminClient.Create();
            _appSettings.TableName = "perf123456";
            dropTable();
        }

        public V2.TableName getTable()
        {
            Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - Checking existance of {_appSettings.TableName}");
            bool _isTableExists = checkTable();
            if (!_isTableExists)
            {
                while (!_isTableExists)
                {
                    Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - Creating table {_appSettings.TableName}.");
                    createTable();
                    _isTableExists = checkTable();
                };
            }
            else
            {
                _table = new Google.Cloud.Bigtable.V2.TableName(_appSettings.ProjectId, _appSettings.InstanceId, _appSettings.TableName);
            }

            return _table;
        }

        private bool checkTable()
        {


            DateTime startTime = DateTime.Now;
            try
            {
                Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - Checking table {_appSettings.TableName}.");
                var response = _adminClient.GetTable(new Admin.V2.TableName(_appSettings.ProjectId, _appSettings.InstanceId, _appSettings.TableName), null);

                Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - Table {_appSettings.TableName} exits.");
            }
            catch (Exception ex)
            {
                if (ex.Message.ToLower().Contains("table not found"))
                {
                    Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - Table {_appSettings.TableName} not found.");
                    return false;
                }
                else
                {
                    Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - Exception while checking table {_appSettings.TableName}. Error message: {ex.Message}.");
                    checkTable();
                }
            }
            return true;
        }

        private void createTable()
        {
            try
            {
                var response = _adminClient.CreateTable(new InstanceName(_appSettings.ProjectId, _appSettings.InstanceId),
                    _appSettings.TableName,
                    new Table
                    {
                        Granularity = Table.Types.TimestampGranularity.Millis,
                        ColumnFamilies =
                        {
                        { _appSettings.ColumnFamily, new ColumnFamily { GcRule = new GcRule { MaxNumVersions = 3 } } }
                        }
                    });

                Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - Table created {_appSettings.TableName} successfully.");

                _table = new Google.Cloud.Bigtable.V2.TableName(_appSettings.ProjectId, _appSettings.InstanceId, _appSettings.TableName);
                new loadDataHelper(_table).loadTable();
            }
            catch (Exception ex)
            {
                Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - Exception while creating table {_appSettings.TableName}. Error message: {ex.Message}.");
            }

        }

        private void dropTable()
        {
            DateTime startTime = DateTime.Now;
            try
            {
                _adminClient.DeleteTable(
                    new Admin.V2.TableName(_appSettings.ProjectId, _appSettings.InstanceId, _appSettings.TableName),
                    null);

                Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - Table {_appSettings.TableName} deleted successfully.");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - Exception while deleting table {_appSettings.TableName}, error message: {ex.Message}");
            }
        }
    }
}