How can I obtain the skew of each entity in a dedicated SQL pool

Jhon Jairo Cabrera Carrasco 20 Puntos de reputación
2023-11-02T14:19:05.14+00:00

I have followed the step by step of these urls https://learn.microsoft.com/es-es/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-tables-overview#table-size-queries, https://learn.microsoft.com/es-es/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-tables-distribute creating the view and obtaining the entities with skew >10%, the idea is with that query to be able to obtain a variable with the skew:

I have Tried to create the variable that prints the skew but the number of entities obtained are different between queries.

--Entities with skew >10%, vTableSizes by Microsoft
select *
from dbo.vTableSizes
where two_part_name in
    (
    select two_part_name
    from dbo.vTableSizes
    where row_count > 0
    group by two_part_name
    having (max(row_count * 1.000) - min(row_count * 1.000))/max(row_count * 1.000) >= .10
    )
order by two_part_name, row_count;

--Entities with skew >10% vTableSizes by jjcc

drop table stg.tables_check
select [schema_name],table_name,two_part_name,distribution_policy_name,distribution_column,index_type_desc,sum(row_count)cant_registros,
(max(row_count * 1.000) - min(row_count * 1.000))/ case when max(row_count * 1.000)=0 then 1 else max(row_count * 1.000) end skew,
case when (max(row_count * 1.000) - min(row_count * 1.000))/(case when max(row_count * 1.000)=0 then 1 else max(row_count * 1.000) end )>.10 then 'skew > al 10%' else 'skew < 10%' end indicador
into stg.tables_check
from dbo.vTableSizes
group by [schema_name],table_name,two_part_name,distribution_policy_name,distribution_column,index_type_desc

SQL Server
SQL Server
Familia de sistemas de análisis y administración de bases de datos relacionales de Microsoft para soluciones de comercio electrónico, línea de negocio y almacenamiento de datos.
108 preguntas
{count} votos

1 respuesta

Ordenar por: Lo más útil
  1. Carlos Solís Salazar 17,971 Puntos de reputación
    2023-12-01T21:38:45.18+00:00

    Parece que estás enfrentando un desafío con la consistencia de los resultados al ejecutar consultas SQL para identificar sesgo (skew) en las tablas de Azure Synapse Analytics. Veamos primero los detalles de tus consultas y luego te proporcionaré algunos consejos para resolver este problema.

    Análisis de las Consultas

    Tienes dos consultas principales:

    1. Consulta de Microsoft (vTableSizes) Esta consulta selecciona todas las filas de dbo.vTableSizes donde el sesgo es mayor al 10%. La lógica para calcular el sesgo es (max(row_count) - min(row_count)) / max(row_count).
    2. Consulta Personalizada (jjcc) Esta versión modifica ligeramente la lógica de cálculo del sesgo y además almacena los resultados en una tabla stg.tables_check. Calcula el sesgo con una ligera variación en la fórmula y en el manejo de max(row_count) = 0.

    Posibles Razones de la Inconsistencia

    1. Diferencias en la Fórmula de Cálculo de Sesgo: Aunque similar, la fórmula utilizada en la segunda consulta tiene una ligera variación, especialmente en cómo maneja el caso cuando max(row_count) es cero. Esto puede causar diferencias en los resultados.
    2. Agrupación y Selección de Datos: La forma en que agrupas y seleccionas los datos en la segunda consulta (por esquema, nombre de tabla, etc.) podría estar afectando los resultados. Esto podría llevar a diferencias en la forma en que se calcula el sesgo para cada grupo.

    Sugerencias para Resolver el Problema

    1. Revisar la Lógica de Cálculo de Sesgo: Asegúrate de que la lógica para calcular el sesgo es consistente en ambas consultas. Cualquier pequeña variación puede llevar a resultados diferentes.
    2. Verificar los Datos Agrupados: Asegúrate de que los datos que estás agrupando son los mismos en ambas consultas. Diferencias en la agrupación pueden llevar a resultados diferentes.
    3. Comparar Resultados Parciales: Ejecuta partes de las consultas (por ejemplo, solo la parte de agrupación y cálculo básico de sesgo) para ver si los resultados intermedios son consistentes.
    4. Revisar la Definición de vTableSizes: Asegúrate de que la vista vTableSizes está definida de manera que proporcione los datos esperados y necesarios para tus cálculos.
    5. Uso de Transacciones y Estado de la Base de Datos: Si los datos en dbo.vTableSizes están cambiando rápidamente (por ejemplo, debido a operaciones de carga de datos en curso), podrías obtener resultados diferentes entre ejecuciones. Considera usar transacciones o puntos de consistencia.

    Si después de estos pasos sigues teniendo incongruencias, sería útil examinar los datos subyacentes y la definición exacta de dbo.vTableSizes para entender mejor cómo se están calculando las estadísticas de las tablas.

    Espero que estas sugerencias te ayuden a resolver el problema. Si encuentras esta información útil o necesitas más asistencia, no dudes en aceptar esta respuesta o hacerme saber cómo puedo ayudarte más.

    0 comentarios No hay comentarios

Su respuesta

Las respuestas pueden ser marcadas como Respuestas aceptadas por el autor de la pregunta, lo que indica a los usuarios que la respuesta resolvió su problema.