从 HDFS 中的数据文件夹在 hive 中创建表 - 删除重复的行

时间:2021-01-22 02:34:23

标签: hive hdfs

我在 HDFS 中有一个文件夹,我们称之为 /data/users/ 在该文件夹中,每 10 天添加一个新的 csv 文件。基本上新文件将只包含活动用户,因此,例如

  • file_01Jan2020.csv:包含 1000 个当前活跃用户的数据
  • file_10Jan2020.csv:包含 950 个当前活跃用户的数据(file_01Jan2020.csv 中的数据相同,但少了 50 条记录)
  • file_20Jan2020.csv:包含 920 个当前活跃用户的数据(file_10Jan2020.csv 中的数据相同,但少了 30 条记录)

实际上,这些文件要大得多(每个文件约 800 万条记录,并且可能每 10 天减少 1000 条)。此外,较新的文件永远不会有旧文件中不存在的新记录。它只会有更少的记录。

我想使用此文件夹中的数据在 hive 中创建一个表。我现在正在做的是:

  • 根据文件夹/data/users/中的数据创建外部表
  • 创建具有相同结构的内部表
  • 将数据从外部表写入内部表,其中,
    • 删除重复项
    • 如果其中一个文件中不存在记录,那么我会将其标记为“已删除”,并在我在创建的内部表中定义的新列中设置“已删除”

我担心创建外部表的步骤,因为数据真的很大,一段时间后该表会很大,我想知道是否有更有效的方法来执行此操作而不是每次加载文件夹中的所有文件。

所以我的问题是:将数据从 HDFS 文件夹摄取到 hive 表中的最佳方法是什么,鉴于此,该文件夹包含大量重复的文件。

1 个答案:

答案 0 :(得分:0)

我建议按日期对数据进行分区,这样您每次读取表时都不必遍历所有记录。