【发布时间】:2016-02-18 15:49:02
【问题描述】:
我目前正在实施对 HDFS 和 Hive 表的监控数据的 ETL (Talend)。 我现在面临重复的问题。更详细地说,如果我们需要使用相同的输入运行一个 ETL 作业 2 次,我们最终会在 Hive 表中出现重复。
RDMS 中的解决方案是在发送数据之前存储输入文件名并“删除其中文件名=...”。但 Hive 不是 RDBMS,不支持删除。
我想就如何处理这个问题获得您的建议。我设想了两种解决方案:
- 实际上,ETL 正在将 CSV 文件放入 HDFS,这些文件用于为 ORC 表提供“INSERT INTO TABLE ... SELECT ...” 问题是,通过这个操作,我输了文件名,ORC文件名为00000。是否可以指定这个创建的ORC文件的文件名?如果可以,我可以通过文件名搜索数据并删除在启动 ETL 之前。
- 我不习惯 Hive 的 ACID 功能(Hive 0.14+ 上的功能)。 您会建议使用 Hive 启用 ACID 吗?我可以使用它“删除 WHERE”吗?
如果您对此有任何其他解决方案,请随时提出建议。
最好的, 奥兰多
【问题讨论】:
-
如何将所有文件加载到临时表中并使用 INSERT OVERWRITE ... SELECT DISTINCT.. 加载最终表。
-
通过这样做,我确实可以避免每次运行 ETL 时出现重复,但我无法避免使用相同输入的 2 次运行出现重复。此外,如果多个输入文件存储在同一个分区中,则 INSERT OVERWRITE 会导致数据丢失。