es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Leer y agregar archivos CSV en Mule 4.

Tengo varios archivos CSV con el siguiente formato:

ID;NOTA;FISCYEAR;MES;MONEDA;MONEDA_2;NUMEROS;NUMEROS_2;EFECTIVO
177204930;"Algo ""relevante" fecha 01.03.07";2021;1;EUR;599;599000;599;"599,00 EUR"
175618258;"Dirección; 48ct xpto.";2021;1;EUR;1;1000;0,35;"0,35 EUR"

Donde debo leerlos y agregarlos en un solo payload para procesarlos (con “batch”) más tarde. Debo leer ~50 archivos, con ~33MB cada uno.

Sin embargo, el “Operador de lista de archivos” no tiene el atributo “outputMimeType”, como en “En archivo nuevo o actualizado”, donde puedo configurar en la pestaña “Tipo MIME” el “separador=;”, “escape="” y “streaming=true”. No puedo usar este último ya que solo puedo leer un archivo a la vez con él.

¿Cómo puedo solucionar este problema?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, puede utilizar el Conector de Archivos para leer los archivos CSV y luego utilizar DataWeave para agregarlos en una sola carga. En el Conector de Archivos, puede establecer el atributo outputMimeType en text/csv para asegurarse de que los archivos se lean como CSV. También puede configurar los atributos separator y escape para que coincidan con el formato de sus archivos CSV.

    Una vez que ha leído todos los archivos CSV utilizando el Conector de Archivos, puede utilizar DataWeave para agregarlos en una sola carga. Puede utilizar la función read para leer cada archivo CSV como una entrada y luego utilizar flatten para combinarlos en un solo array. Finalmente, puede utilizar reduce para fusionar los arrays en una sola carga.

    Aquí hay un ejemplo de código de DataWeave que ilustra cómo agregar los archivos CSV:

    %dw 2.0
    output application/csv
    import * from dw::core::Arrays
    var files = [
        "file1.csv",
        "file2.csv",
        "file3.csv"
    ]
    ---
    (files 
        map ((file) -> read(file, "application/csv", {separator: ";", escape: "\"", streaming: true}) 
            default ([]))
        flatten) reduce ((item, acc = []) -> acc ++ item)
    

    En este ejemplo, tenemos una matriz de nombres de archivo que queremos leer. Utilizamos la función map para leer cada archivo y convertirlo en una matriz de registros. Luego utilizamos flatten para combinar todas las matrices en una sola matriz. Finalmente, utilizamos reduce para fusionar las matrices en una sola carga.

    Al utilizar este enfoque, puede leer y agregar múltiples archivos CSV en una sola carga para el procesamiento por lotes. Este enfoque también le permite configurar las opciones CSV para cada archivo de forma individual, según sea necesario.

Comments are closed.