/// <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");
        }
Exemple #3
0
        /// <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}");
                        }
                    }
                }
            }
        }