Я работаю над системой, которая генерирует данные в конвейере данных, начиная с исходных данных и создавая различные промежуточные таблицы, чтобы получить финальную таблицу, которую я назову final_table
.
Прямо сейчас создание final_table
выполняется с помощью запроса, подобного следующему:
DROP TABLE IF EXISTS final_table;
CREATE TABLE final_table AS
( <massive SELECT statement> );
Проблема, с которой я сталкиваюсь, заключается в следующем: если массивный оператор SELECT завершается неудачно (и это так), то мы находимся в плохом состоянии без final_table
вообще.
Я планирую изменить код, чтобы сделать следующее, но хотел убедиться, что не было лучшего способа. Схема еще не стабилизирована и может измениться в будущем, поэтому INSERT OVERWRITE
пока не вариант.
CREATE TABLE final_table_staging AS
( <massive SELECT statement> );
DROP TABLE IF EXISTS final_table;
CREATE TABLE final_table AS (SELECT * FROM final_table_staging);
DROP TABLE final_table_staging;
Есть ли другой способ написать его, чтобы объявить и сделать комбинацию drop + create как atomi c?
Смежный вопрос: HIVE - ВСТАВИТЬ ПЕРЕЗАПИСЬ против DROP TABLE + CREATE TABLE + INSERT INTO