java - 从HIVE表中复制副本,需要写出删除的记录并获取计数

标签 java sql apache-spark hadoop hive

因此,我们有一个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/

相关文章:

java - 如何创建一个水平滚动条,它会在一段时间间隔后自动滚动

java - Cellbrowser 在单元格上单击事件

Mysql 选择 1 个月前保存的记录,如果没有找到,则选择较旧的记录

python - Pyspark 'NoneType'对象没有属性 '_jvm'错误

java - 跨连接子类问题进行限制条件查询

java - flush() java 文件处理

sql - 当连接更改时,MySQL SELECT 将永远运行

MySQL:获取多个条目的两个日期之间的变化百分比

sql - 如何从 VBA 连接到 Apache spark/hadoop

scala - 在 Spark Scala 中禁用科学计数法