sql hadoop hive vs toad for db2 多个distinct counts

8ulbf1ek  于 2021-04-02  发布在  Hive
关注(0)|答案(3)|浏览(557)

我试图为toad构建一个查询,但是,以下内容无法使用。

select count (distinct t.column1, t.column2)
from schema.table
;

然而,上面的查询在 hadoop hive 中工作得很好。有什么建议可以改进查询,使其适用于toad?

mdfafbf1

mdfafbf11#

模仿这种行为是有点棘手的,最安全的方法可能是:

select sum(case when seqnum = 1 and column1 is not null and column2 is not null then 1 else 0 end)
from (select t.*,
             row_number() over (partition by column1, column2 order by column1) as seqnum
      from t
     ) t

("order by "这一列并不重要。许多数据库都需要这一列,所以我经常包括它。)
这个版本适用于任何数据库,而不仅仅是db2.问题是,如果任何值是NULL,hive不计算一行。
问题是,如果任何值是NULL,hive就不计算一条记录,这一点考虑到了。
在子查询中使用 "select distinct "比较接近,但是它计算 "NULL "值 -- 而且这种改变可能不适合查询中的其他列。
然而当有重叠的值时,你就会遇到问题(比如'12'/'3'和'1'/'23')。

0yg35tkg

0yg35tkg2#

你可以使用一个子查询。

select count(1)
from (select distinct t.column1, t.column2 from schema.table) as t1
;
vktxenjb

vktxenjb3#

试着把它们连起来。

select count(distinct concat(t.column1, t.column2))
from schema.table t

相关问题