从 HDFS 中的数据文件夹在配置单元中创建表 - 删除重复的行

Posted

技术标签:

【中文标题】从 HDFS 中的数据文件夹在配置单元中创建表 - 删除重复的行【英文标题】:Create table in hive from data folder in HDFS - remove duplicated rows 【发布时间】:2021-04-26 12:46:36 【问题描述】:

我在 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 天减少 1K 条记录)。此外,较新的文件永远不会有旧文件中不存在的新记录。它只会有更少的记录。

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

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

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

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

【问题讨论】:

"如果其中一个文件中不存在记录,那么我会将其标记为“已删除”,并将“已删除”设置在我在内部表中定义的新列中created” - 如果您只从这些文件中加载记录,那么记录怎么可能不在文件中?你真的需要每次都检查所有文件吗? 不清楚你如何处理删除,请详细描述,我不明白记录如何从以前的文件中消失。如果它基于最新文件中的存在,那么您只需将新文件放在单独的文件夹(加载日期)中,并使用完整联接+案例逻辑的配置单元查询将其与目标表合并***.com/a/37744071/2700344 【参考方案1】:

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

【讨论】:

以上是关于从 HDFS 中的数据文件夹在配置单元中创建表 - 删除重复的行的主要内容,如果未能解决你的问题,请参考以下文章

使用 create-hive-table 在 Hive 中创建表时如何使用自定义分隔符

从以 orc 格式存储在 hdfs 中的文件创建配置单元表

如何在不删除源文件的情况下将数据从 HDFS 加载到配置单元?

当我们从 s3 中的 csv 文件读取数据并在 aws athena 中创建表时如何跳过标题。

尝试将 hdfs 中的 csv 文件加载到配置单元表时未选择行

在 symfony2 中创建表