Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Cómo validar si dos consultas devuelven el mismo conjunto de resultados

Pregunta

¿Cómo puedo verificar que dos consultas devuelvan los mismos conjuntos de resultados?

Respuesta

Puede utilizar el siguiente enfoque:

WITH
    (
        SELECT sum(cityHash64(*))
        FROM
        (
            -- your query 1 here
            -- SELECT ...
        )
    ) AS q1_resultset_hash,
    (
        SELECT sum(cityHash64(*))
        FROM
        (
            -- your query 2 here
            -- SELECT ...
        )
    ) AS q2_resultset_hash
SELECT equals(q1_resultset_hash,q2_resultset_hash) as Q1_equals_Q2

El ejemplo usa una CTE para calcular la suma del valor cityHash de cada fila en estas dos consultas, y devolverá 1 si los dos conjuntos de resultados son idénticos.

Usando algunos datos de una secuencia de enteros y formato Pretty:

WITH
    (
        SELECT sum(cityHash64(*))
        FROM
        (
            SELECT *
            FROM numbers(10)
            ORDER BY number DESC
        )
    ) AS q1_resultset_hash,
    (
        SELECT sum(cityHash64(*))
        FROM
        (
            SELECT *
            FROM numbers(10)
            ORDER BY number ASC
        )
    ) AS q2_resultset_hash
SELECT q1_resultset_hash = q2_resultset_hash AS Q1_equals_Q2
FORMAT Pretty

devolverá:

┏━━━━━━━━━━━━━━┓
┃ Q1_equals_Q2 ┃
┡━━━━━━━━━━━━━━┩
│            1 │
└──────────────┘

Aunque esto puede ser útil en muchos casos, no puede considerarse una solución infalible para validar la igualdad de los conjuntos de resultados para todo tipo de datos, y su uso tiene algunas limitaciones; por ejemplo, si alguna fila contiene valores NULL, el enfoque anterior fallará.

Navigation