Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hive 配置单元插入覆盖是否保证没有重复的行?_Hive_Sql Insert - Fatal编程技术网

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;