Мне нужно отсортировать таблицу Hive и удалить записи на основе объединения с одним столбцом в другой таблице. Я хочу удалить соответствующие записи из целевой таблицы.
При проверке размера файла целевой таблицы ее записи составляют примерно 820 ГБ данных, а записи хранятся в виде текстовых файлов. Таблица содержит 19 строковых столбцов, и таблица не разбита на разделы.
Я не уверен, что является лучшим подходом для этой работы. Первоначально я думал написать сценарий, который перемещает исходные файлы во временное местоположение в Had oop, а затем вызвать задание PySpark, которое записывает целевую таблицу (из временного местоположения) и соединяет таблицу с dataFrames. Затем я выполняю анти-объединение двух таблиц в новом dataFrame, сохраняя только столбцы целевой таблицы.
Все несоответствующие записи в объединяемом dataFrame будут вставлены в исходное местоположение таблицы Hive, и я воссоздаю таблицу там после завершения задания PySpark.
Я могу ошибаться, но я считаю, что перемещение файлов во временное расположение необходимо, поскольку PySpark не может читать записи и перезаписывать их в одном месте в одном и том же месте.
Но я скептически отношусь к перемещению 820 ГБ записей во временное местоположение и заданию PySpark, которое выводит большую часть этой суммы просто для перезаписи и обновления записей в таблице Hive. Я должен был бы удалить данные во временном местоположении, как только работа закончится тоже.
Могу ли я читать и перезаписывать записи из одного и того же места в задании PySpark? Есть ли другой способ обойти необходимость перемещения исходных файлов таблицы?
Чтобы избежать перемещения исходных файлов таблицы во временное расположение, я подумывал написать скрипт запроса beeline с теми же логами соединения c и используя INSERT OVERWRITE или команду UPDATE, чтобы удалить соответствующие записи. Но я не уверен, что это лучший вариант, и я не знаю, как настроить конфиги запроса / работы beeline.
Другой метод beeline, о котором я думаю, - это создать временную таблицу с условием предотвращения объединения, чтобы она содержала только несовпадающие записи. Как только эта временная таблица создана, я могу вставить перезаписать целевую таблицу в временную таблицу. Но у этого подхода тоже могут быть проблемы.
У кого-нибудь есть рекомендации по подходу к этой задаче? Одно условие фильтрации для целевой таблицы: хотя целевая таблица не разбита на разделы, ее самые ранние записи, основанные на одном столбце дат go по состоянию на 13 апреля 2013 года, и диапазон дат записей, которые должны быть удалены из таблицы, относятся к октябрю. 1 2019 г. - 30 марта 2020 г. из той же даты.
Я довольно новичок в Had oop вместе со Spark и Hive - извиняюсь за мое невежество, которое показывает, но я ценю все отзывы.