Ответ 1
INSERT OVERWRITE TABLE _tableName_ PARTITION (_partitionColumn_= _partitionValue_)
SELECT [other Things], CASE WHEN id=206 THEN 'florida' ELSE location END AS location, [other Other Things]
FROM _tableName_ WHERE [_whereClause_];
Вы можете указать несколько разделов, разделив их запятыми. ... PARTITION (_partitionColumn_= _partitionValue1_, _partitionColumn_= _partitionValue2_, ...)
. Я не делал этого с несколькими разделами, всего по одному, поэтому я проверял результаты на test/dev env, прежде чем делать все разделы сразу. У меня были другие причины для ограничения каждого OVERWRITE
на один раздел.
На этой странице https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML есть немного больше. Этот сайт https://cwiki.apache.org/confluence/display/Hive/LanguageManual, в общем, является вашим лучшим другом при работе с HiveSQL.
Я разработал нечто идентичное этому, чтобы перенести некоторые данные, и это сработало. Я не пробовал его против больших наборов данных, всего несколько ГБ, и он отлично работал.
Примечание. Это раздел OVERWRITE. Это заставит предыдущие файлы прощаться. Создавайте сценарии и процедуры резервного копирования и восстановления.
[other Things]
и [other Other Things]
- остальные столбцы из таблицы. Они должны быть в правильном порядке. Это очень важно, иначе ваши данные будут повреждены.
Надеюсь, это поможет.:)