Introducción a Azure SQL Data Warehouse

Review Azure SQL Data Warehouse

Azure Sql Data Warehouse es la solución de data warehouse de Azure que utiliza el procesamiento masivo en paralelo para ejecutar consultas complejas sobre petabytes de información.

SQL Data Warehouse almacena la información en tablas relacionales con formato columnar, lo que reduce el coste del almacenamiento y mejora el rendimiento de las consultas.

Arquitectura

SQL Data Warehouse se basa en una arquitectura que distribuye los el procesamiento de los datos en múltiples nodos. Separa el cómputo del almacenamiento de los datos, lo que permite escalar independientemente del tamaño de los datos que almacenemos.

Azure SQL Data Warehouse
Arquitectura Azure SQL Data Warehouse

1. Las aplicaciones se conectan y envían comandos de T-SQL al nodo de control. Este nodo de control es el que ejecuta el motor MPP que optimiza las queries para su procesamiento en paralelo y se las envía a los nodos de cómputo.

2. Los nodos de cómputo ejecutan las consultas sobre la información almacenada en Azure Storage.

3. la capa de Azure Storage hace “sharding” de la información en distribuciones para optimizar el rendimiento del sistema.

4. Por último, el DMS (Data Movement Service) se encarga de mover los datos entre los nodos para devolver los resultados adecuados cuando se ejecutan las consultas en paralelo.

Distribuciones

Una distribución es la unidad de almacenamiento y procesamiento utilizada por SQL Data Warehouse para distribuir la información y ejecutar consultas en paralelo.

Cuando se ejecuta una consulta sobre SQL Data Warehouse, el trabajo se divide en 60 consultas más pequeñas que se ejecutan en paralelo. Cada una de esas consultas se ejecutan sobre una distribución y cada nodo de cómputo gestiona una o más de esas 60 distribuciones.

Como veremos más adelante, existen tres tipos de distribución que se pueden aplicar a las tablas.

Tablas

Persistencia

Las tablas se pueden persistir de manera permanente en el almacenamiento de SQL Data Warehouse, de manera temporal o en un almacenamiento externo al data warehouse.

  • Las tablas permanentes almacenan su información en la capa de Azure Storage del data warehouse. La tabla y su información permanecen después de que el usuario que creó la tabla haya cerrado su sesion.
  • Las tablas temporales sólo existen durante el periodo que está activa la sesión del usuario que creó la tabla.
  • Las tablas externas son aquellas cuyos datos se encuentran en Azure Blob Storage o Azure Data Lake Store. Estas tablas son útiles para cargar información al data warehouse.
Distribución

Existen tres formas en las que se puede distribuir la información de una tabla dentro del data warehouse:

Hash-distributed: Los datos de distribuyen en base al valor de una columna definida en la tabla como columna de distribución. Esta distribución es la mejor para conseguir una mejora de rendimiento en grandes tablas o consultas que realizan joins de varias tablas. Escoger la clave de distribución no es sencillo pero en general se deben seguir estas premisas:

  • Escoger una columna cuyos valores no tengan que ser actualizados.
  • Escoger una columna cuyos valores estén distribuidos uniformemente.
  • Escoger una columna que sea candidata a usarse para hacer JOIN, GROUP BY , DISTINCT, OVER o HAVING y que no sea de tipo fecha.

Replicated: Cada nodo de cómputo tiene una copia completa de la tabla. Las consultas van mucho más rápido en las tablas replicadas, puesto que no es necesario realizar ningún movimiento de datos entre los nodos de cómputo. Sin embargo requieren almacenamiento adicional y no funcionan bien con tamaños de tabla por encima de 2 GB.

Round robin: Los datos de la tabla se distribuyen de manera uniforme y aleatoria entre todas las particiones. La carga de datos en este tipo de tablas es muy rápida, pero las consultas son penalizadas porque suelen requerir un mayor movimiento de datos entre los nodos de cómputo que las otras dos distribuciones.

Estadísticas

El optimizador de consultas utiliza las estadísticas de las columnas de una tabla cuando crea el plan para la ejecución de la consulta. Para mejorar el rendimiento de las consultas es importante crear estadísticas especialmente en las columnas que se utilizan en las operaciones de tipo JOIN.

Por defecto, la creación automática de estadísticas está habilitada el SQL Data Warehouse. Con esta funcionalidad, SQL Data Warehouse analiza las consultas entrantes de los usuarios y crea estadísticas de columnas individuales para aquellas columnas que no tienen estadísticas. Como este proceso se ejecuta de forma síncrona, puede suponer una bajada del rendimiento de las consultas si las columnas no tienen aún creadas las estadísticas.

Es recomendable actualizar las estadísticas diariamente en columnas que reciben gran cantidad de información nueva que pueda hacer cambiar la distribución de los datos. Un buen ejemplo de columna a actualizar sería la agregación de una nueva fecha en una columna de tipo fecha.

Índices

Actualmente existen tres tipos de índices que se pueden aplicar a las tablas en su creación:

Clustered columstore indexes: Es el índice utilizado de forma predeterminada cuando no se especifica el tipo de índice en la creación de la tabla. Ofrecen el máximo nivel de comprensión de los datos y el mejor rendimiento general de las consultas. Suele ser la mejor opción para tablas grandes especialmente a partir de los 100 millones de filas.

Heap tables: Cuando especificamos este tipo de tabla, en realidad lo que estamos diciendo es que no se utilice ningún indexado. Por esta razón utilizar este tipo de índices es una buena opción cuando necesitamos cargar información en el data warehouse en tablas de staging antes de realizar cualquier otra operación ya que al no tener indexación la carga es mucho más rápida.

Clustered indexes: Clustered index es el índice recomendado a utilizar cuando se quieren recuperar pocas filas de la tabla de manera rápida. Por ejemplo, cuando queremos recuperar un registro de una tabla a partir de su ID.

Administración de cargas de trabajo

La administración de las cargas de trabajo es la habilidad de optimizar el rendimiento general de las consultas para entornos con múltiples usuarios concurrentes.

El rendimiento de una query está determinado por la clase de recursos asociada al usuario. Las clases de recursos son límites predeterminados en SQL Data Warehouse que gestionan los recursos de computación y la concurrencia para la ejecución de las consultas. Utilizando clases de recursos podemos limitar el número de consultas que se ejecutan de manera concurrente y los recursos de computación asignados a cada consulta.

Hay dos tipos de clases de recursos:

Estáticas: Asigna la misma cantidad de memoria a las queries independientemente del rendimiento del cluster. El escalado horizontal del cluster hace aumentar la memoria y en consecuencia con este tipo de clase de recursos aumenta la concurrencia. Este tipo es el recomendado para optimizar la concurrencia cuando el volumen de datos del data warehouse se mantiene constante.

Dinámicas: Asigna una cantidad variable de memoria en función del rendimiento actual del cluster. El escalado horizontal del cluster hace que las consultas obtengan una mayor cantidad de memoria automáticamente. Este tipo de clase de recursos es la recomendada para trabajar con data warehouses que tienen una cantidad de datos variable o creciente.

Carga de datos

La información se puede cargar dentro de un cluster de SQL Data Warehouse de múltiples formas; sin embargo, el método recomendado en la mayoría de los casos es utilizar PolyBase. Polybase es una tecnología que permite acceder a la información externa almacenada en Azure Blob Storage o Azure Data Lake Store.

Polybase soporta los siguientes tipos de ficheros:

  • Ficheros de texto separados por delimitadores en codificación UTF-8 y UTF-16
  • RC-File
  • ORC
  • Parquet

Además Polybase soporta ficheros comprimidos en Gzip o Snappy.

Y puede ejecutarse de las siguientes formas:

  • Polybase con T-SQL: Es el método ideal cuando la información está en Azure Blob Storage o Azure Data Lake Store y es el que permite un mayor control sobre el proceso de carga.
  • Polybase con SSIS: Es el método ideal cuando la información a cargar esta en SQL Server ya sea en Azure o en el entorno “OnPremise”. SSIS define el mapeo entre la fuente y el destino y orquesta los procesos de carga.
  • Polybase con Azure Data Factory: Data factory es una herramienta que orquesta y planifica la ejecución de pipelines. En los pipelines en los que se carga información al data warehouse data factory usa Polybase.
  • Polybase con Azure DataBricks: Polybase permite leer tablas del data warehouse en dataframes se Spark y escribir dataframes de Spark en tablas del data warehouse.

Sigue nuestros blog en el que continuaremos publicando breves reviews sobre soluciones Azure.

Cloud Architect

Cloud Architect en Keepler. "Me apasiona el Big Data en cualquiera de sus vertientes y la nube pública en todos sus sabores (AWS , Azure , Google Cloud). Me encanta enfrentarme a nuevos retos cada día y estar constantemente descubriendo nuevas formas de sacar valor a los datos. En mi puesto de trabajo procuró diseñar e implementar arquitecturas escalables y resilientes que aporten un valor añadido."

Port Relacionados

¿Qué opinas?

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.