如何验证两个查询是否返回相同的结果集
·2 分钟阅读
了解如何使用哈希函数和比较技术来验证两个 ClickHouse 查询是否产生相同的结果集。
问题
如何验证两个查询返回相同的结果集?
答案
您可以使用以下方法
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
该示例使用 CTE 来计算这两个查询中每行 cityHash 值的总和,如果两个结果集相同,将返回 1。
使用一些整数序列数据和一些美观的格式
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
将返回
┏━━━━━━━━━━━━━━┓
┃ Q1_equals_Q2 ┃
┡━━━━━━━━━━━━━━┩
│ 1 │
└──────────────┘
虽然这在许多情况下可能很方便,但它不能被认为是验证所有类型结果集相等的万能方法,并且使用它有一些注意事项,例如,如果任何行包含 NULL 值,上述方法将失败。