因此,我们有一个ETL流程,可以从多个HIVE表中提取数据。我们的过程读取HIVE表,创建一个数据框,然后使用dropDuplicates函数删除重复项。在此过程完成后,我想将其复制到HIVE中以用于报告过程。是的,开销是一团糟,因为现在我们有两个单独的代码库,但是主要的ETL流程不能具有此功能,因为这会使它放慢速度。我们需要此信息来进行报告,并将在批处理中稍后进行。无论如何,我需要一条SQL语句来读取配置单元表并确定重复的键值是什么并获取它们的计数。假设某个特定键值在表中有9条记录,则该值的重复数据删除计数将为8(9-1,因为我们将始终保留父记录)。然后遍历表格并获取这些计数:)
最佳答案
-- create a temp table with example values
CREATE TEMPORARY TABLE t1 (c1 string, c2 string, c3 string);
INSERT INTO TABLE t1
VALUES('a','b','c'),('a','g','c'),('a','b','c'),('b','a','c'),
('c','a','b'),('a','b','c'),('a','g','c'),('e','b','a');
-- count duplicates
SELECT
c1,
c2,
c3,
COUNT(c1)-1 AS dup_count
FROM t1
GROUP BY
c1,
c2,
c3
如果只想输出重复的行:
SELECT *
FROM (
SELECT
c1,
c2,
c3,
COUNT(c1)-1 AS dup_count
FROM t1
GROUP BY
c1,
c2,
c3
) dups
WHERE dup_count > 0
关于java - 从HIVE表中复制副本,需要写出删除的记录并获取计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58884015/