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
carlosteixeira
15 - Aurora
15 - Aurora

@xkid_dup_602 

 

Puedes hacer algunas cosas para mejorar. 


Primero, antes de usar o excel y hacer o tratar dos datos, lo ideal sería un conversor o un archivo xls en una yxdb (extensión alteryx)
Después de la conversión, lo usa (yxdb) como entrada. Esta extensión se lee más rápido que xls.

 

En segundo lugar, es posible que eliminar el mayor volumen de columnas no inicie el flujo de trabajo, lo que le permitirá usar solo el final o el final.

 

En tercer lugar, si está utilizando las últimas versiones de Alteryx (2020.2), puede habilitar la opción para utilizar el mecanismo amplificador.

 

https://help.alteryx.com/es-419/current/designer/alteryx-amp-engine

 

Y finalmente, es posible, no sé mucho sobre postgrado, usar un cargador masivo o un tipo de conexión de mayor rendimiento que ODBC (si está usando), por ejemplo. JDC, OCI, etc.

 

Espero que estos consejos te ayuden a mejorar el rendimiento.
Avísame aquí si alguno de ellos funcionó para ti

Carlos A Teixeira
Aguisande
15 - Aurora
15 - Aurora

Adicionalmente a lo que @carlosteixeira te comenta, lo que se puede hacer es procesar los excel y luego utilizar un Stream In (En la categoría IN Database), para "subir" los datos de los excel ya procesados y continuar con el proceso de actualización de Base de datos en forma In-DB

 

Esta herramienta, permite pasar de proceso local a In-DB (Subiendo los datos a una nueva tabla, creando una temporal o reemplazando una existente)

aguisande_0-1611788276543.png

 

xkid_dup_602
Asteroide

Hola @carlosteixeira y @Aguisande !

 

Muchas gracias por su respuesta, les comento que comence a utilizar la opción Stream In, dividiendo mi workflow en dos partes de tal manera que la primera solo se encargue de subir la data a la Base de Datos y posteriormente hacer todo con DB-Tools. Sin embargo, sigue tomando mucho tiempo para lograrlo, aproximadamente 1 hora y no se si se deba a las caracteristicas de mi equipo o driver:

 

Mi equipo es un servidor que cuenta con 12 GB de RAM

El ODBC que estoy utilizando es la versión 3.51

El input tiene 17500 registros y 9 columnas 

 

A mi entender deberia funcionar bien, aqui el primer workflow que tarda 25 minutos

da.png

 
 

Adicional a esto les comento que ejecutando toda la transformación de manera local y escribiendo el output en un archivo excel tarda unicamente 20 segundos, entonces asumo que el problema esta en la carga de datos a la Base.

 

¿Saben si podria haber alguna opción más?

carlosteixeira
15 - Aurora
15 - Aurora

@xkid_dup_602 

 

Al parecer, tu problema es cuando ingresas como datos y no como post-juego.

Sugerencia, ¿por qué no se enfrenta a lo contrario, o en lugar de cargar sus datos a o Postgree, por qué no rastrea los datos desde postgree o alteryx usando o datastream out? Obviamente, este no es el caso si tiene una gran cantidad de datos.

Esta es solo una sugerencia para el otro lado que hemos enumerado anteriormente.

Otra opción, intente utilizar otra conexión JDBC, por ejemplo.
Vea algunas comparaciones a continuación.

Sigue el enlace donde lo encontré: https://stackoverflow.com/questions/21795119/odbc-vs-jdbc-performance

 

Deciding Between ODBC and JDBC Drivers Use native ODBC for:

  • Fastest performance for data imports and exports
  • Memory-intensive data imports and exports

Use JDBC for:

  • Platform independence allowing you to work with any operating system (including Mac and Linux®), driver version, or bitness (32-bit or 64-bit)
  • Using Database Toolbox functions not supported by the native ODBC interface (such as runstoredprocedure)
  • Working with complex or long data types (e.g., LONG, BLOB, text, etc.)

Tip:

  • On Windows systems that support both ODBC and JDBC drivers, pure JDBC drivers and the native ODBC interface provide better connectivity and performance than the JDBC/ODBC bridge.
Carlos A Teixeira
xkid_dup_602
Asteroide

@carlosteixeira De hecho intente usar la primera opcion que comentas,

 

Intente cargar unicamente los datos y posteriormente utilizar un Data Stream Out, de la siguiente manera para posteriormente utilizar unicamente DB Tools:

 

f.png

 

Pero a pesar de eso tarda demasiado tiempo (lleva 1 hr en ese momento), entonces considero que el problema esta en el tipo de conexión e intentare verificar si funciona mejor con un Driver JDBC como comentas.

 

Esperemos funcione.

carlosteixeira
15 - Aurora
15 - Aurora

@xkid_dup_602 

 

¿Cuántas líneas tienes en Excel?

Carlos A Teixeira
Aguisande
15 - Aurora
15 - Aurora

Sorry, pero me surge una duda... Mencionaste que estás utilizando el driver de ODBC de PostreSQL v. 3.51. Eso es correcto?

Revisando la página de drivers oficial de PostgreSQL (https://www.postgresql.org/ftp/odbc/versions/msi/), el driver ODBC actual es el 13 y versiones previas a la 7 no tienen más soporte.

 

Antes que seguir modificando workflows, creo que es conveniente revisar el mismo driver.

 

Por otro lado, yo uso el de Simba, que si tienes acceso al portal de licencias de Alteryx (o alguien en tu empresa), en la sección drivers lo puedes conseguir.

 

Adicionalmente, por lo que vi, estás subiendo datos a Azure (Estás utilizando una VPN?)

Podrás medir la velocidad de transferencia de tu conexión?

 

A mí PostgreSQL me está cargando 1MM de registros en 1:07 minutos

aguisande_0-1611796771645.png

 

Nota adicional: Tengo entendido que no hay forma de hacer una conexión JDBC desde Alteryx. Si saben cómo hacerla, me encantaría aprenderlo.

carlosteixeira
15 - Aurora
15 - Aurora

Grandes comentarios mi amigo @Aguisande 
Creo que descubrió el problema de nuestro amigo.

Carlos A Teixeira
xkid_dup_602
Asteroide

Hola @Aguisande @carlosteixeira @dsmdavid 

 

En efecto, como comenta @Aguisande estoy utilizando la versión 3.51, me imagino que el problema viene por ahi y necesito hacer un upgrade, ya que hice varias pruebas cambiando el tipo de dato como comenta @dsmdavid y aun asi tarda demasiado. Adicionalmente hice pruebas de velocidad en el internet ayer por la noche y hoy por la mañana, a mi parecer la velocidad es buena y no muestran mucha varianza entre cada prueba a pesar de que no ocupo una VPN como tal (todo es por medio de citrix para conecarse a los servers), estos son los resultados:

 

Por la Noche:

 

Mañana.png

 

Por la Mañana:

 

noche.png

 

Entonces, considero que la opción es a intentar cambiar el driver ODBC por uno más reciente que tenga soporte o contactar a alguien que pueda tener acceso a SIMBA como comenta @Aguisande , muchisimas gracias por su tiempo y si tienen alguna idea adicional se los agradeceria mucho, un saludo

 

 

Etiquetas