es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo combinar la expresión de grupo y la expresión de cubo en la cláusula GROUP BY de SparkSQL?

Quiero usar group by y cube en SparkSQL, como select a,b,c,sum(d) from table group by a, cube(b,c), pero arrojó java.lang.UnsupportedOperationException, parece que solo puedo usar uno de ellos (expresión de grupo o expresión de cubo).

De esta manera se puede lograr en Postgre o Presto, y escribiendo los detalles de cómo usarlo en la documentación de SparkSql en el siguiente fragmento.

Analítica de agrupación mixta/anidada

Una cláusula GROUP BY puede incluir múltiples group<em>expressions y múltiples CUBE|ROLLUP|GROUPING SETSs. Las GROUPING SETS también pueden tener cláusulas anidadas CUBE|ROLLUP|GROUPING SETS, por ejemplo, GROUPING SETS(ROLLUP(warehouse, location), CUBE(warehouse, location)), GROUPING SETS(warehouse, GROUPING SETS(location, GROUPING SETS(ROLLUP(warehouse, location), CUBE(warehouse, location)))). CUBE|ROLLUP es solo azúcar sintáctica para GROUPING SETS, por favor refiérase a las secciones anteriores para saber cómo traducir CUBE|ROLLUP a GROUPING SETS. La group</em>expression puede tratarse como un conjunto de grupo único bajo este contexto. Para múltiples GROUPING SETS en la cláusula GROUP BY, generamos un solo GROUPING SETS haciendo un producto cruzado de los GROUPING SETS originales. Para GROUPING SETS anidados en la cláusula GROUPING SETS, simplemente tomamos sus conjuntos de agrupación y los eliminamos. Por ejemplo, GROUP BY warehouse, GROUPING SETS((product), ()), GROUPING SETS((location, size), (location), (size), ()) y GROUP BY warehouse, ROLLUP(product), CUBE(location, size) son equivalentes a GROUP BY GROUPING SETS( (warehouse, product, location, size), (warehouse, product, location), (warehouse, product, size), (warehouse, product), (warehouse, location, size), (warehouse, location), (warehouse, size), (warehouse)).

GROUP BY GROUPING SETS(GROUPING SETS(warehouse), GROUPING SETS((warehouse, product))) es equivalente a GROUP BY GROUPING SETS((warehouse), (warehouse, product)).
Tags:  ,

Answer

  1. Avatar for davy.ai

    Si quieres usar group by y cube juntos en SparkSql, te encontrarás con el error java.lang.UnsupportedOperationException. Esto se debe a que SparkSql solo permite que se use una de las dos expresiones (expresión de grupo o expresión de cubo). Sin embargo, en Postgre o Presto es posible usar ambas juntas.

    Para lograr análisis de agrupamiento mixto/anidado como GROUPING SETS, puedes usar múltiples group_expressions y múltiples CUBE|ROLLUP|GROUPING SETS en la cláusula GROUP BY. Para múltiples GROUPING SETS, SparkSql genera un solo GROUPING SETS haciendo un producto cruzado de los GROUPING SETS originales. Para los GROUPING SETS anidados en la cláusula GROUPING SETS, simplemente toma sus conjuntos de agrupamiento y los despoja.

    Aquí tienes un ejemplo de cómo usar esto en SparkSql:

    SELECT warehouse, product, location, size, sum(amount)
    FROM sales
    GROUP BY GROUPING SETS ((warehouse), (warehouse, product), (location, size));
    

    Esto agrupará los datos por warehouse, warehouse y product, y location y size. El resultado contendrá la suma de la columna amount para cada grupo.

    Ten en cuenta que CUBE|ROLLUP es solo un azúcar sintáctico para GROUPING SETS. Por lo tanto, puedes usar GROUPING SETS en lugar de CUBE|ROLLUP.

    Para obtener más información, puedes consultar la documentación de SparkSql sobre análisis de agrupamiento mixto/anidado.

Comments are closed.