/// <summary> /// Importa los datos del archivo sobre el proveedor /// </summary> private void Import(ProviderModel provider, SentenceImportCsv sentence, string fileName, BlockLogModel block) { long records = 0; // Copia del origen al destino using (CsvReader reader = new CsvReader(fileName, sentence.Definition, sentence.Columns, sentence.BatchSize)) { // Asigna el manejador de eventos reader.ReadBlock += (sender, args) => block.Progress("Importing", args.Records, 0); // Copia los datos del archivo sobre la tabla records = provider.BulkCopy(reader, sentence.Table, sentence.Mappings, sentence.BatchSize, sentence.Timeout); } // Log block.Info($"Imported {records:#,##0} records"); }
/// <summary> /// Importa el archivo /// </summary> private void Import(BlockLogModel block, ProviderModel provider, SentenceImportParquet sentence, string fileName) { long records = 0; // Copia del origen al destino using (ParquetDataReader reader = new ParquetDataReader(fileName, sentence.RecordsPerBlock)) { // Asigna el manejador de eventos reader.Progress += (sender, args) => block.Progress("Importing", args.Records, 0); // Copia los datos del archivo sobre la tabla records = provider.BulkCopy(reader, sentence.Table, sentence.Mappings, sentence.RecordsPerBlock, sentence.Timeout); } // Log block.Info($"Imported {records:#,##0} records"); }
/// <summary> /// Ejecuta una sentencia de copia masiva /// </summary> private void ExecuteBulkCopy(SentenceBulkCopy sentence) { using (BlockLogModel block = Manager.Logger.Default.CreateBlock(LogModel.LogType.Info, $"Start bulckcopy to table {sentence.Table}")) { ProviderModel source = GetProvider(sentence.Source); ProviderModel target = GetProvider(sentence.Target); if (source == null) { AddError($"Can't find source provider: {sentence.Source}"); } else if (target == null) { AddError($"Can't find target provider: {sentence.Target}"); } else if (string.IsNullOrWhiteSpace(sentence.Table)) { AddError("The target table is undefined at BulkCopy sentence"); } else { CommandModel command = ConvertProviderCommand(sentence.Command, out string error); if (!string.IsNullOrWhiteSpace(error)) { AddError($"Error when convert command. {error}"); } else // Ejecuta la consulta sobre el proveedor { try { using (IDataReader reader = source.OpenReader(command, TimeSpan.FromMinutes(10))) { target.BulkCopy(reader, sentence.Table, sentence.Mappings, sentence.BatchSize, TimeSpan.FromMinutes(15)); } } catch (Exception exception) { AddError($"Error when execute bulkCopy. {exception.Message}"); } } } } }