计算配置单元中分区表中不匹配的行

时间:2019-03-20 16:10:51

标签: mysql hive partitioning outer-join

我有一个用例,我必须从分区的配置单元表的两个不同分区中计算不匹配的行(不包括匹配记录)。

让我们假设有一个称为test的分区表,该表在as_of_date列上进行了分区。现在要获取不匹配的行,我尝试了两种选择- 1.) select count(x.item_id) from (select coalesce(test_new.item_id, test_old.item_id) as item_id from (select item_id from test where as_of_date = '2019-03-10') test_new full outer join (select item_id from test where as_of_date = '2019-03-09') test_old on test_new.item_id = test_old.item_id where coalesce(test_new.item_id,0) != coalesce(test_old.item_id,0)) as x;

2。)我首先创建一个视图,然后在该视图上进行查询 create view test_diff as select coalesce(test_new.item_id, test_old.item_id) as item_id, coalesce(test_new.as_of_date, date_add(test_old.as_of_date, 1)) as as_of_date from test test_new full outer join test test_old on (test_new.item_id = test_old.item_id and date_sub(test_new.as_of_date, 1) = test_old.as_of_date) where coalesce(test_new.item_id,0) != coalesce(test_old.item_id,0);

然后我正在使用查询 select count(distinct item_id) from test_diff where as_of_date = '2019-03-10';

两种情况都返回不同的计数。第二种选择是减少计数。请提供任何有关计数为何不同的建议。

1 个答案:

答案 0 :(得分:0)

假设您在第二个选项中处理过test_new,test_old表(已过滤为as_of_date ='2019-03-10')

第一个选项,您正在使用选择子句count(X.item_id),其中,第二个选项的计数为(distinct)。不重复可能会减少您在以后的选项中的项目数量。