Hive 配置单元插入覆盖是否保证没有重复的行?
当我们使用Hive 配置单元插入覆盖是否保证没有重复的行?,hive,sql-insert,Hive,Sql Insert,当我们使用insert overwrite时,我们发现了大量重复项。 我们的SQL非常简单: insert overwrite table table_c select table_a.id table_a.name from table_a left outer join table_b on table_a.id = table_b.id where table_b.id is null; 表a和表b没有重复项。 执行此sql时,一个任务失败,但整个作业最终成功。 我们还
insert overwrite
时,我们发现了大量重复项。
我们的SQL非常简单:
insert overwrite table table_c
select
table_a.id
table_a.name
from table_a
left outer join table_b
on table_a.id = table_b.id
where table_b.id is null;
表a
和表b
没有重复项。
执行此sql时,一个任务失败,但整个作业最终成功。
我们还发现表c位置下有三个文件:
000000\u 0
,000000\u复制\u 1
,000000\u 1
。
任务失败并重试是否会导致重复
非常感谢。在某些情况下,即使没有失败,从消除重复的表中插入覆盖也会导致重复 例如,此行为:如果将
BIGINT
值插入Int
,则值将被自动截断以适合Int,并且新生成的值可能会被复制
此外,如果在DISTRIBUTE BY中使用非确定性函数,如rand(),则容器重新启动可能会导致相同的行以不同的方式计算,并在重新启动后分配到不同的缩减器,这将产生重复。但你没有使用这样的功能
对你来说应该没问题。失败的任务正在重新启动,其结果将被丢弃,并且不应影响最终结果。由于节点宕机、长时间运行的任务没有心跳、某些运行时错误在重新启动后没有再现(如OOM)、任务尝试被其他进程终止、AWS群集中的spot节点丢失等原因,很可能会出现故障。如果作业成功执行,则应该可以。此外,文件在整个作业结束时被写入,它们从临时位置复制到表位置
原因可能是连接键中存在重复。选中此项:
select id, count(*) cnt from table_b group by id having count(*)>1 order by cnt desc limit 100;
在某些情况下,即使未失败,从已消除重复的表中插入覆盖也可能导致重复 例如,此行为:如果将
BIGINT
值插入Int
,则值将被自动截断以适合Int,并且新生成的值可能会被复制
此外,如果在DISTRIBUTE BY中使用非确定性函数,如rand(),则容器重新启动可能会导致相同的行以不同的方式计算,并在重新启动后分配到不同的缩减器,这将产生重复。但你没有使用这样的功能
对你来说应该没问题。失败的任务正在重新启动,其结果将被丢弃,并且不应影响最终结果。由于节点宕机、长时间运行的任务没有心跳、某些运行时错误在重新启动后没有再现(如OOM)、任务尝试被其他进程终止、AWS群集中的spot节点丢失等原因,很可能会出现故障。如果作业成功执行,则应该可以。此外,文件在整个作业结束时被写入,它们从临时位置复制到表位置
原因可能是连接键中存在重复。选中此项:
select id, count(*) cnt from table_b group by id having count(*)>1 order by cnt desc limit 100;