/// <summary>
        ///		Convierte un archivo parquet a csv
        /// </summary>
        internal async Task <bool> ConvertAsync(BlockLogModel block, string source, string target, CancellationToken cancellationToken)
        {
            bool converted = false;

            // Convierte el archivo
            try
            {
                LibCsvFiles.Controllers.CsvDataReaderWriter writer = new LibCsvFiles.Controllers.CsvDataReaderWriter();

                // Evita el error de await
                await Task.Delay(1);

                // Crea el directorio de salida
                LibHelper.Files.HelperFiles.MakePath(System.IO.Path.GetDirectoryName(target));
                // Escribe el archivo
                using (LibParquetFiles.Readers.ParquetDataReader reader = new LibParquetFiles.Readers.ParquetDataReader(source))
                {
                    writer.Save(reader, target);
                }
                // Indica que se ha convertido
                converted = true;
            }
            catch (Exception exception)
            {
                block.Error($"Error when convert '{source}' to '{target}'", exception);
            }
            // Devuelve el valor que indica si se ha convertido
            return(converted);
        }
        /// <summary>
        ///		Obtiene el esquema de un archivo parquet
        /// </summary>
        private string GetParquetSchema(string fileName)
        {
            string sql    = "SELECT ";
            int    length = 80;

            // Obtiene el esquema del archivo
            try
            {
                // Añade los nombres de campos
                using (LibParquetFiles.Readers.ParquetDataReader reader = new LibParquetFiles.Readers.ParquetDataReader(fileName))
                {
                    // Abre el archivo
                    reader.Open();
                    // Añade los nombres de campo
                    for (int index = 0; index < reader.FieldCount; index++)
                    {
                        // Añade un salto de línea si es necesario
                        if (sql.Length > length)
                        {
                            sql    += Environment.NewLine + "\t\t";
                            length += 80;
                        }
                        // Nombre de campo
                        sql += $" `{reader.GetName(index)}`";
                        // Añade la coma si es necesario
                        if (index < reader.FieldCount - 1)
                        {
                            sql += ", ";
                        }
                    }
                }
                // Añade el nombre de tabla
                sql += Environment.NewLine + $"\tFROM parquet.`{fileName}`";
            }
            catch (Exception exception)
            {
                sql = $"Error when read schema {fileName}. {exception.Message}";
            }
            // Devuelve la cadena creada
            return(sql);
        }