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.

Importar archivo csv en el cubo de s3 con campos separados por punto y coma.

Estoy utilizando AWS Data Pipelines para copiar datos SQL a un archivo CSV en AWS S3. Algunos de los datos tienen comas entre comillas, por ejemplo:

{“id”: 123455, “user”: “some,user” …. }

Al importar estos datos CSV en DynamoDB, toma la coma como el final del valor del campo. Esto resulta en errores, ya que los datos proporcionados en el mapeo no coinciden con el esquema que hemos proporcionado.

Mi solución para esto es – mientras copio los datos de SQL a un bucket de S3 – separar nuestros campos CSV con un ; (punto y coma). De esta manera, los valores dentro de las comillas se tomarán como uno solo. Y los datos se verían así (nota el espacio en blanco dentro de la cadena de comillas después de la coma):

{“id”: 12345; “user”: “some, user”; …. }

Mi configuración se ve así:

- database_to_s3:
   name: data-to-s3
   description: Dumps data to s3.
   dbRef: xxx
   selectQuery: >
     select * FROM USER;
   s3Url: '#{myS3Bucket}/xxxx-xxx/'
   format: csv

¿Hay alguna forma en la que pueda usar un delimitador para separar los campos con un ; (punto y coma)?

¡Gracias!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes configurar el delimitador como punto y coma al exportar los datos SQL a un archivo CSV utilizando AWS Data Pipelines. En tu pila, agrega las siguientes líneas a tu configuración database_to_s3:

          csvDelimiter: ';'
    

    Esto establecerá el delimitador como punto y coma, y tus campos CSV estarán separados por puntos y comas en lugar de comas. De esta manera, tus valores dentro de las comillas no se separarán y se tomarán como un solo campo al importar en DynamoDB.

    Tu configuración actualizada database_to_s3 debería lucir así:

      - database_to_s3:
          name: data-to-s3
          description: Dumps data to s3.
          dbRef: xxx
          selectQuery: >
            select * FROM USER;
          s3Url: '#{myS3Bucket}/xxxx-xxx/'
          format: csv
          csvDelimiter: ';'
    

    ¡Espero que esto te ayude!

Comments are closed.