Características y temas adicionales de SQL Server que no están cubiertas en categorías específicas
How can I obtain the skew of each entity in a dedicated SQL pool
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 | Otros
2 respuestas
Ordenar por: Muy útil
-
Carlos Solís Salazar 18,376 Puntos de reputación MVP2023-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:
- Consulta de Microsoft (vTableSizes)
Esta consulta selecciona todas las filas de
dbo.vTableSizesdonde el sesgo es mayor al 10%. La lógica para calcular el sesgo es(max(row_count) - min(row_count)) / max(row_count). - 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 demax(row_count) = 0.
Posibles Razones de la Inconsistencia
- 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. - 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
- 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.
- 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.
- 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.
- Revisar la Definición de
vTableSizes: Asegúrate de que la vistavTableSizesestá definida de manera que proporcione los datos esperados y necesarios para tus cálculos. - Uso de Transacciones y Estado de la Base de Datos: Si los datos en
dbo.vTableSizesestá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.vTableSizespara 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.
- Consulta de Microsoft (vTableSizes)
Esta consulta selecciona todas las filas de