Я работал над одним решением и обнаружил, что в некоторых конкретных случаях куст insert overwrite
усекает таблицу, но в некоторых случаях это не так.Кто-нибудь, пожалуйста, объясните мне, как он себя ведет?
, чтобы объяснить это, у меня две таблицы, source и target , и я пытаюсь вставить данные в мастер изисходная таблица с использованием insert overwrite
Когда в исходной таблице есть раздел
, если в исходной таблице есть раздел и если вы пишете условие, что раздел не существует тогда он не будет усекать главную таблицу.
create table source (name String) partitioned by (age int);
insert into source partition (age) values("gaurang", 11);
create table target (name String, age int);
insert into target partition (age) values("xxx", 99);
следующий запрос не будет усекать таблицу, даже если select ничего не возвращает.
insert overwrite table temp.test12 select * from temp.test11 where name="Ddddd" and age=99;
Однако следующий запрос будет урезать таблицу .
insert overwrite table temp.target select * from temp.test11 where name="Ddddd" and age=11;
это имеет смысл в первом случае, так как раздел (age = 99) не существует, поэтому он должен прекратить выполнение запроса в дальнейшем.Однако это мое предположение, не уверен, что именно происходит.
Когда в исходной таблице нет раздела, но в Target есть , в этом случае таблица назначения не будет усечена, даже если оператор select из исходной таблицы возвращает 0 строк.
use temp;
drop table if exists source1;
drop table if exists target1;
create table source1 (name String, age int);
create table target1 (name String) partitioned by (age int);
insert into source1 values ("gaurang", 11);
insert into target1 partition(age) values("xxx", 99);
select * from source1;
select * from target1;
Следующий запрос не будет усекать таблицу, даже если в операторе выбора не найдены данные.
insert overwrite table temp.target1 partition(age) select * from temp.source1 where age=90;
Когда у источника или цели нет раздела
В этом случае, если я пытаюсь вставить цель перезаписи и оператор выбора, не возвращает ни одной строки, тогдаТаблица назначения будет усечена.проверьте пример ниже.
use temp;
drop table if exists source1;
drop table if exists target1;
create table source1 (name String, age int);
create table target1 (name String, age int);
insert into source1 values ("gaurang", 11);
insert into target1 values("xxx", 99);
select * from source1;
select * from target1;
После запроса будет обрезать целевую таблицу.
insert overwrite table temp.target1 select * from temp.source1 where age=90;