track tag attribute sql hadoop hive distinct

sql - tag - grupo distinto vs por el cual es mejor



title tags html (1)

Tu experiencia es interesante. No he visto el efecto reductor único para distinct versus group by . Quizás haya alguna diferencia sutil en el optimizador entre las dos construcciones.

Un ejemplo "famoso" en Hive es:

select count(distinct id) from mytbl;

versus

select count(*) from (select distinct id from mytbl ) t;

El primero solo usa un reductor y el segundo opera en paralelo. He visto esto en mi experiencia, y está documentado y discutido (por ejemplo, en las diapositivas 26 y 27 de esta presentation ). Entonces, los distinct pueden definitivamente aprovechar el paralelismo.

Me imagino que a medida que la colmena madura, estos problemas se solucionarán. Sin embargo, es irónico que Postgres tenga un problema de rendimiento similar con COUNT(DISTINCT) , aunque creo que la razón subyacente es un poco diferente.

Para el caso más simple todos nos referimos a:

select id from mytbl group by id

y

select distinct id from mytbl

como sabemos, generan el mismo plan de consulta que se ha mencionado repetidamente en algunos elementos como Cual es mejor: Distinct o Group By

En la colmena, sin embargo, el primero solo tiene una tarea de reducción mientras que el segundo tiene muchos.

A partir de los experimentos, descubrí que el GROUP BY es 10 veces más rápido que DISTINCT.

Ellos son diferentes.

Entonces lo que aprendí es:

GROUP-BY no es peor que DISTINTO, y es mejor a veces.

Me gustaría saber:

1 . Si esta conclusión es cierta.

2 . Si es verdad, consideraré DISTINCT como un enfoque para la conveniencia lógica, pero ¿por qué DISTINCT no toma la mejor implementación de GROUP-BY?

3 . Si fuera falso, estaría muy ansioso por saber su uso decente en una situación de big data.

¡¡Muchas gracias!!:)