Senior Cloud Solution Architect
Amazon Redshift se puede considerar como unos de los data warehouse más importantes de la actualidad y que ofrece AWS en su nube. Trabajando en Bluetab, hemos tenido el placer de usarlo en muchas ocasiones con nuestros momentos buenos / malos al igual que este año 2020. Por ello, hemos creado una lista con los errores más comunes que debéis evitar y que esperemos os sirvan de gran ayuda.
En Bluetab llevamos desde hace más de 10 años trabajando alrededor del dato. En muchos de los cuales, hemos ayudado en la evolución tecnológica de muchas empresas migrando sus entornos tradicionales analíticos y BI de Data Warehouse a entornos de Big Data.
Además desde la Práctica Cloud hemos participado en migraciones a la nube y nuevos desarrollos de proyectos de Big Data la nube de Amazon Web Services y Google Cloud. Toda esta experiencia nos ha permitido crear un grupo de personas muy cualificadas que piensan/trabajan por/para la nube.
Para ayudaros con vuestros trabajos en la nube, os queremos presentar los errores más comunes que hemos encontrado a la hora de trabajar con Redhisft, la herramienta de DW más importante que ofrece AWS.
Aquí tenéis la lista de ellos:
Amazon Redshift es un base de datos analítica (OLAP) en la nube muy rápida y totalmente administrada por AWS. Con ella se simplifica y mejora el análisis de datos utilizando SQL estándar compatible con la mayoría de las herramientas de BI existentes.
Las características más importantes de Amazon Redshift son:
Amazon Redshift no es igual que otros sistemas SQL de base de datos. Para aprovechar adecuadamente todos sus beneficios es necesario que se sigan una buenas practicas, de esa manera el cluster funcionará de manera óptima.
Un error muy común que cometemos al comenzar a usar Redshift, es suponer que Redshift es simplemente un PostgreSQL vitaminado y que partiendo de un schema compatible con él puedes empezar a trabajar con Redshift. Sin embargo, no podrías estar más equivocado.
DISTKEY
. De esta manera los datos se distribuirán en los diferentes nodos agrupados por los valores de la clave elegida. Esto te permitirá realizar consultas de tipo JOIN
sobre esa columna de manera muy eficiente.ALL
. Aquellas tablas que son comúnmente usadas en joins de tipo diccionario es recomendable que se copien a todos los nodos. De esta manera la sentencia JOIN
realizada con tablas de hechos mucho más grandes se ejecutará mucho más rápido.EVEN
. De esta forma los datos se distribuirán de manera aleatoria.SELECT *.
e incluye solo las columnas que necesites.WHERE
para restringir la cantidad de datos a leer.GROUP BY
y SORT BY
para que el planificador de consultas pueda usar una agregación más eficiente.Cargar conjuntos de datos muy grandes puede tomar mucho tiempo y consumir gran cantidad de recursos del cluster. Además si esta carga se realiza de manera inadecuada también puede afectar el rendimiento de las consultas.
Por ello, es recomendable seguir estas pautas:
Usa siempre el comando COPY
para cargar los datos en paralelo desde Amazon S3, Amazon EMR, Amazon DynamoDB o desde distintos orígenes de datos en hosts remotos.
copy customer from 's3://mybucket/mydata' iam_role 'arn:aws:iam::12345678901:role/MyRedshiftRole';
Si es posible, lanza un solo comando en vez de varios. Puedes usar un fichero manifest o patrones para cargar varios ficheros de una sola vez.
Divide los archivos de datos de carga de tal modo que sean:
Para actualizar los datos e insertar datos nuevos de manera eficiente al cargarlos usa una tabla provisional.
-- Crea una tabla provisional y, luego, complétala con los datos que se fusionarán.
create temp table stage (like target);
insert into stage
select * from source
where source.filter = 'filter_expression';
-- Usa una combinación interna con la tabla provisional para eliminar las filas de la tabla destino que se están actualizando.
begin transaction;
delete from target
using stage
where target.primarykey = stage.primarykey;
-- Inserta todas las filas de la tabla provisional.
drop table stage;
insert into target
select * from stage;
end transaction;
-- Elimina la tabla provisional.
drop table stage;
A lo largo de los años hemos visto muchos clientes que tenían graves problemas de rendimiento con Redshift debido a fallos de diseño de sus BBDD. Muchos de ellos habían intentado resolverlos añadiendo más recursos al cluster en vez de intentar solucionar el problema de raíz.
Por ellos te propongo que sigas el siguiente flujo para dimensionar tu cluster:
Recolecta información sobre el tipo de consultas a realizar, tamaño de los datos, concurrencia esperada, etc.
Diseña tus tablas en base a las consultas que se vayan a realizar.
Dependiendo del tipo de consultas (sencillas, largas, complejas…), selecciona el tipo de instancia de Redshift (DC2, DS2 o RA3).
Teniendo en cuenta el tamaño del dataset, calcula el número nodos de tu cluster.
# of Redshift nodes = (uncompressed data size) * 1.25 / (storage capacity of selected Redshift node type)
« Para el cálculo del tamaño de almacenamiento, se recomienda tener además un margen mayor para realizar tareas de mantenimiento. »
Realizar pruebas de carga para comprobar el rendimiento.
En el caso de no funcionar adecuadamente, optimiza las queries modificando el diseño de las tablas incluso si fuera necesario.
Finalmente, si no fuera suficiente, itera hasta encontrar el dimensionamiento adecuado de nodos y tamaños.
Es bastante probable que vuestro caso de uso necesite que existan varias sesiones o usuarios que estén ejecutando consultas al mismo tiempo. En estos casos, algunas consultas pueden consumir recursos del clúster durante periodos de tiempo prolongados y afectar al rendimiento de las otras consultas. En esta situación, es posible que las consultas sencillas tendrán que esperar hasta que se complete las consultas más largas.
Mediante el uso de WLM, vamos a poder administrar la prioridad y capacidad de los diferentes tipos de ejecuciones creando diferente colas de ejecución.
Es posible configurar la WLM de Amazon Redshift para su ejecución de dos maneras diferentes:
Cuando un usuario ejecuta una consulta, WLM asigna la consulta a la primera cola coincidente, en función de las reglas de asignación de cola de WLM.
El mantenimiento de la base de datos es un término que usamos para describir un conjunto de tareas que se ejecutan con la intención de mejorar la base de datos. Existen rutinas destinadas a ayudar al rendimiento, liberar espacio en disco, verificar errores de datos, verificar fallos de hardware, actualizar estadísticas internas y muchas otras cosas oscuras (pero importantes).
En el caso de Redshift, se tiene la falsa sensación de que al ser un servicio totalmente administrado por Amazon no es necesario realizar ninguna. De esta manera creas el cluster y te olvidas de él. Aunque es cierto que AWS te facilita muchas tareas de administración (crear, parar, arrancar, destruir o realizar backups), esto no podría ser más erróneo.
Las tareas de mantenimiento más importantes que debes de llevar a cabo en Redshift son:
VACUUM
y es necesario ejecutarlo manualmente para poder hacer uso de SORT KEYS
de tipo INTERLEAVED
. Este es un proceso bastante largo y costoso que va a tener que hacerlo a poder ser, en las ventanas de mantenimiento.STV_LOAD_STATE
en las que es posible encontrar información acerca del estado actual de las instrucciones COPY
en curso. Debes de revisarlas a menudo para comprobar que no hay errores en la integridad de los datos.STL_ALERT_EVENT_LOG
o a través de la misma consola web de AWS.Mi nombre es Álvaro Santos y ejerzo como Solution Architect desde hace más de 5 años. Estoy certificado en AWS, GCP, Apache Spark y alguna que otras más. Entré a formar parte en Bluetab en octubre de 2018 y desde entonces estoy involucrado en proyectos cloud de Banca y Energía y además participo como Cloud Master Partitioner. Soy un apasionado de las nuevas patrones distribuidos, Big Data, Open-source software y cualquier otra cosa de mundo IT que mole.
Patrono
Patrocinador
© 2024 Bluetab Solutions Group, SL. All rights reserved.