Community Spring Cleaning week is here! Join your fellow Maveryx in digging through your old posts and marking comments on them as solved. Learn more here!
Free Trial

Foro

RESUELTAS

Carga de datos a SQL: Mal Performance

xkid_dup_602
Asteroide

¡Hola a todos comunidad!

 

Estoy intentando automatizar un proceso en donde al final la data debe almacenarse en una Base de Datos de PosgreSQL, sin embargo el workflow toma 1hr aproximadamente para ejecutarse por completo.

 

Se que al utilizar las DB Tools se podria optimizar todo, pero el problema es que el imput proviene de un archivo tipo excel (.xlsx) y que antes de alojar la información en la Base de Datos debe ser tratada/limpiada antes.

 

¿Saben de alguna alternativa que pueda agilizar/optimizar la carga de datos?

 

¡Saludos!

12 RESPUESTAS 12
xkid_dup_602
Asteroide

Chicos una pregunta,

 

Saben si es posible cargar la data usando Runnin Command a la base desde un CSV? esa es otra prueba que me gustaria intentar hacer.

 

Saludos

dsmdavid
Bólido

Un apunte más - al subir datos a la base de datos es importante que los campos estén definidos con el tipo correcto (y compatible con la tabla existente, si la hay). P. ej. Si hay campos V_w de un tamaño descomunal (como el que se crea con una fórmula por defecto), puede hacer que la transferencia de datos se ralentice. Un vistazo al select que precede a la herramienta de subida de datos te dirá si esto influye.

 

xkid_dup_602
Asteroide

Hola de nuevo chicos, gracias a todos por ayudar, considero que la respuesta dew @Aguisande  es la solución adecuada, sin embargo por motivos de la empresa no tengo suficientes accesos para actualizar Drivers ni instalar VPN de manera inmediata.

 

Les comento que hay una segunda alternativa que encontre bastante viable en casos como este, y es cargar la data de manera remota mediante de un archivo batch ejecutado por Run command de Alteryx. La solución que genere me permitio reducir los tiempos de carga de data de 2 horas a 1 segundo, esí es como lo desarrolle:

 

Requisitos previos: Contar con Sistema Operativo Windows, tener la comunicación TCP/IP al puerto (5432 en mi caso)  y PGSQL instalado.

 

1- Ejecutar prueba manual de conectividad y funcionabilidad de comandos antes de automatizar con Alteryx

 

A) Ejecutar un comando que nos direccione a la carpeta donde PGSQL esta instalado.

 

En mi caso:

C:

cd "C:\pgsql\bin"

 

B) Generar un comando capaz de conectarse a la Base de Datos y que permita copiar la información ddeseada desde un archivo .csv a una tabla ya creada previamente.

 

En mi caso:

 

psql -h suggestedorder.postgres.database.azure.com -d DBName -U User -c "\copy Schema.TableName (Column1, Column2, ColumnN) from 'C:\directory\NameFile.csv' with delimiter as ','

 

C) Al ejecutar los comandos anteriores por cuestiones de seguirdad y SSL requerira el password del usuario por lo que es requerido ingresarlo manualmente y este es el primer problema para generar una automatización con alteryx, pero existen un par de Workarounds que ayudan a solventar esto:

 

- Crear Environment Variables: Yo no utilice esta opción porque no cuento con permisos de administrador

Para mayor detalle visita: https://www.postgresql.org/docs/9.1/libpq-envars.html

 

- Crear un Password File: 

El password file se debe generar en una carpeta con el nombre 'postgresql' dentro de la dirección %APPDATA% donde se debera crear un archivo 'pgpass.conf'

donde se deberan escribir los datos de la BD de la siguiente forma:

 

hostname:port:database:username:password

 

o desde CMD ejecutar los siguientes comandos:

 

cd

%appdata%

mkdir postgresql

cd postgresql notepad pgpass.conf

 

Para mayor detalle visita: https://www.postgresql.org/docs/9.1/libpq-pgpass.html

 

2. Al hacer esta prueba manual en el servidor nuevamente ya no se requerira de una contraseña debido a que los datos de la BD se encuentran almacenados en el Password File que se genero anteriormente, por lo que el siguiente paso es generar el archivo .bat que ejecutara Alteryx

 

A) Se requiere abrir un notepad y copiar los comandos usados anteriormente, algo similar a esto:

 

C:
cd "C:\pgsql\bin"

psql -h suggestedorder.postgres.database.azure.com -d DBName -U User -c "\copy Schema.TableName (Column1, Column2, ColumnN) from 'C:\directory\NameFile.csv' with delimiter as ','

 

B) Guardar archivo con la extensión .bat 

 

3. Ejecutar desde alteryx con Run Command, colocando un input "Dummy" para evitar errores en la ejecución:

 

eje.png

 

Espero sea de utilidad para alguien en un futuro, saludos.

Etiquetas