Example #1
0
        public int Run(ImportFileOptions importTask)
        {
            Log.Debug($"TaskExecutor: run for File '{importTask.file}'");

            // 1. Read csv
            // 2. Store csv

            var errNum = CsvReader.Read(importTask, SqlWriter);

            Log.Trace("-------------------------------------------------------------------");
            return(errNum);
        }
Example #2
0
        public static IList <ImportFileOptions> ReadTasks(Logging l, string fileContent)
        {
            JObject importTasksRoot = JObject.Parse(fileContent);

            var importFiles = new List <ImportFileOptions>();

            var importTasks = importTasksRoot.SelectToken("importFiles");

            foreach (var importFile in importTasks)
            {
                var importFileOptions = new ImportFileOptions();

                importFileOptions.connectionString = GetTokenAsString(l, importFile, "connectionString", "");
                importFileOptions.file             = GetTokenAsString(l, importFile, "file", "");
                importFileOptions.sheet            = GetTokenAsString(l, importFile, "sheet", "");
                importFileOptions.row      = GetTokenAsInt(l, importFile, "row", -1);
                importFileOptions.col      = GetTokenAsInt(l, importFile, "col", -1);
                importFileOptions.skipline = GetTokenAsInt(l, importFile, "skipline", -1);

                importFileOptions.table            = GetTokenAsString(l, importFile, "table", string.Format($"{DateTime.Now.Year}{DateTime.Now.Month}{DateTime.Now.Day}{DateTime.Now.Hour}{DateTime.Now.Minute}{DateTime.Now.Second}"));
                importFileOptions.prefix           = GetTokenAsString(l, importFile, "prefix", "");
                importFileOptions.key              = GetTokenAsString(l, importFile, "key", "");
                importFileOptions.macFix           = GetTokenAsString(l, importFile, "macFix", "");
                importFileOptions.csv              = GetTokenAsBoolean(l, importFile, "csv", true);
                importFileOptions.columnMapping    = GetTokenAsDictionary(l, importFile, "columnMapping");
                importFileOptions.batchSize        = Math.Abs(GetTokenAsInt(l, importFile, "batchSize", 1000));
                importFileOptions.delimiter        = GetTokenAsString(l, importFile, "delimiter", "");
                importFileOptions.quoting          = GetTokenAsString(l, importFile, "quoting", "");
                importFileOptions.truncate         = GetTokenAsBoolean(l, importFile, "truncate", false);
                importFileOptions.saveMode         = GetTokenAsBoolean(l, importFile, "saveMode", false);
                importFileOptions.forceCreateTable = GetTokenAsBoolean(l, importFile, "forceCreateTable", false);
                importFileOptions.comment          = GetTokenAsString(l, importFile, "comment", "");

                importFileOptions.retryPolicyNumRetries   = Math.Abs(GetTokenAsInt(l, importFile, "retryPolicyNumRetries", 3));
                importFileOptions.retryPolicyDelayRetries = Math.Abs(GetTokenAsInt(l, importFile, "retryPolicyDelayRetries", 1000)); // Miliseconds

                importFileOptions.uniqueOnly     = GetTokenAsBoolean(l, importFile, "uniqueOnly", false);
                importFileOptions.uniqueFileOnly = GetTokenAsBoolean(l, importFile, "uniqueFileOnly", true);

                importFileOptions.additionalSQL = GetTokenAsString(l, importFile, "additionalSQL", "");

                importFiles.Add(importFileOptions);

                l.Trace("--------------------------------------------------------");
            }
            return(importFiles);
        }
Example #3
0
        public void Init(ImportFileOptions importTask, List <string> headers)
        {
            ImportTask = importTask;
            Headers    = headers;
            Log.Debug($"SqlServerWriter: init for '{ImportTask.file}'");

            sqlCmdBuilder = new SqlCmdBuilder(importTask);

            HeaderFields = sqlCmdBuilder.GetHeaderFields(Headers);

            sqlServerService = new SqlServerService(Log, getSqlConnectionString());

            // Drop table
            sqlServerService.simpleExecQuery(GetDropTableStatement());

            // Create table
            sqlServerService.simpleExecQuery(GetCreateTableStatement());

            // Truncate Table
            sqlServerService.simpleExecQuery(GetTruncateTableStatement());
        }
Example #4
0
        public int Read(ImportFileOptions importTask, ISqlWriter sqlWriter)
        {
            Log.Debug($"ReadCsv for '{importTask.file}'");

            Stopwatch _timer = new Stopwatch();

            _timer.Start();

            List <List <string> > batchLineFields = new List <List <string> >();
            var fileInfo = new System.IO.FileInfo(importTask.file);

            if (!System.IO.File.Exists(importTask.file))
            {
                Log.Error($"ReadCSV : '{importTask.file}' not exists!");
                return(-1);
            }

            var firstLine = ReadFirstLine(fileInfo);

            Char delimiter = string.IsNullOrWhiteSpace(importTask.delimiter) ? GuessDelimeter(firstLine) : importTask.delimiter.First <char>();
            //Char quotingCharacter = '\0'; // no quoting-character;
            Char quotingCharacter = string.IsNullOrWhiteSpace(importTask.quoting) ? GuessquotingCharacter(firstLine) : importTask.quoting.First <char>();
            var  rowCounter       = 0;

            try
            {
                using (var reader = new System.IO.StreamReader(fileInfo.FullName, Encoding.Default))
                {
                    Char escapeCharacter = quotingCharacter;
                    using (var csv = new CsvReader(reader, false, delimiter, quotingCharacter, escapeCharacter, '\0', ValueTrimmingOptions.All))
                    {
                        csv.DefaultParseErrorAction = ParseErrorAction.ThrowException;
                        csv.SkipEmptyLines          = true;

                        var headers = ReadHeaders(csv);
                        Log.Debug("Read:Headers : " + string.Join(",", headers));
                        sqlWriter.Init(importTask, headers);

                        if (!sqlWriter.EnsureFileIsUnique(fileInfo.Length))
                        {
                            Log.Debug($"Read: Import failed. The File '{importTask.file}' with size:'{fileInfo.Length}' has been allready imported.");
                            sqlWriter.UpdateStatusTable(-1, new TimeSpan(), fileInfo.Length);
                            return(-2);
                        }

                        do
                        {
                            // Read a pies of CSV
                            batchLineFields = ReadNextBatch(csv, importTask.batchSize);
                            if (batchLineFields.Count == 0)
                            {
                                break;
                            }
                            Log.Debug($"Read next batch : {batchLineFields.Count} entries start at {rowCounter} to {batchLineFields.Count + rowCounter}");

                            //Create & Write SQL
                            sqlWriter.Write(batchLineFields);

                            rowCounter += batchLineFields.Count;
                        } while (batchLineFields.Count > 0);
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error($"ReadCsv catch exception : {ex.Message}");
                return(-1);
            }

            _timer.Stop();

            var timeSpan = TimeSpan.FromMilliseconds(_timer.ElapsedMilliseconds);

            Log.Debug($"Import from '{importTask.file}' lenght:'{fileInfo.Length}' takes {_timer.ElapsedMilliseconds / 1000.0} seconds or {timeSpan.ToString("c")} of time. {rowCounter} rows inserted.");
            sqlWriter.UpdateStatusTable(rowCounter, timeSpan, fileInfo.Length);

            sqlWriter.ExecuteAdditionalSql();

            return(rowCounter);
        }
Example #5
0
 public SqlCmdBuilder(ImportFileOptions importTask)
 {
     ImportTask = importTask;
     uniqueRows = new Dictionary <int, bool>();
 }
Example #6
0
 public void Init(ImportFileOptions importTask, List <string> headers)
 {
     ImportTask = importTask;
     Headers    = headers;
     Log.Debug($"SqlServerWriter: init for '{ImportTask.file}'");
 }