有没有办法在插入操作时检查 Hive 表中插入了多少行?

Posted

技术标签:

【中文标题】有没有办法在插入操作时检查 Hive 表中插入了多少行?【英文标题】:Is there a way to check how many rows inserted in Hive table while inserting operation? 【发布时间】:2018-02-10 21:10:37 【问题描述】:

在 hive 表中执行插入操作时,所有数据都正确插入,但我需要知道在发生某些网络问题时我是否要在 hive 表中插入 1000 条记录,因此作业将失败,然后 hive 作业被停止有 500 条记录,所以我需要再次启动相同的配置单元工作以进行插入,因为在那种情况下,我认为会发生重复,所以如何避免这种重复插入,我需要在我当前的工作中获取我的最后一个插入记录行任何知道这一点的人,请告诉我。如何归档这种场景对我有帮助。谢谢。

How to delete duplicate records from Hive table?

对于这个链接将解释如何在插入后删除重复记录,我不想这样做,我也不想存储另一个重复的表。

【问题讨论】:

如果您想知道插入的#rows,您需要捕获配置单元日志,或将配置单元日志重定向到文件。如果您知道最后 500 条记录插入的时间,则要删除记录,只需根据 hdfs 文件的时间戳从 hdfs 中删除这些文件。 【参考方案1】:

Hive 作业将被转换为 MR 作业。 在插入操作期间,Hive 将

    将数据写入暂存目录(不是目标目录) 将所有内容从暂存目录移动到目标目录

所以通常你不需要担心这一点,如果插入操作一半失败,也不会有重复数据,因为它们在暂存目录中,直到整个作业成功。

如果你想得到多少行,只需运行

select count(*) from $table;

通常 hive 会为 DML 操作保存元数据,因此通常这会立即返回,而不会引发额外的 MR 作业。

【讨论】:

感谢@Harper 的回复,还有人认为在作业本身中运行作业时可能插入多少行,就像我需要插入现在在 432 行上运行的 1000 条记录一样?就像每行插入时蜂巢响应的心跳一样,如果有,请告诉我。 同样,插入操作的结果将是 ALL 或 Nothing,因此数字 432 对您来说毫无意义。但是如果你想监控作业处理过程,你可以访问yarn上的Application master来获取这些信息。

以上是关于有没有办法在插入操作时检查 Hive 表中插入了多少行?的主要内容,如果未能解决你的问题,请参考以下文章

hadoop中hive下怎么插入一条数据到一个表里面?

将数据插入 Hive 分区表时出错

在单个实例中将 pig 输出存储到 Hive 表中

TSQL - 如何在插入之前根据不同列中的值检查值?

将数据插入 HIVE 表时出错

在分区 hive 表中插入 spark Dataframe 而不会覆盖数据