Готовый перевод Cloudera Imapala: Руководство начинающего / Cloudera Imapala: Tutorials for Getting Started: Advanced Tutorials: Attaching an External Partitioned Table to an HDFS Directory Structure
Подключение внешней партиционированной таблицы к дереву каталогов HDFS
Данное руководство показывает как можно настроить структуру папок HDFS, распределив файлы данных по поддиректориям и подключить внешнюю таблицу Impala что бы делать запросы к данным находящимся в изначальном месте.
В данном руководстве рассматривается таблица, содержащая логи web-сервера, которые распределены по папкам с учетом года, месяца, дня и сервера. Для простоты приводится немного данных в CSV формате, загруженных в каждую партицию.
Первым делом создадим партиционированную таблицу для CSV данных и посмотрим на получившуюся структуру каталогов в HDFS. Колонки field1, field2 и field3 соответствуют содержимому CSV файлов с данными. Колонки year, month, day и host представлены в виде имен подпапок и отсутствуют в CSV файлах. Используя тип STRING обеспечивается консистентность имен подпапок, а ведущими нолями неизменность длины имени.
Вернемся в командную строку linux и проверим структуру каталогов HDFS. (В вашем случае расположение рабочей папки Impala может отличаться, по историческим причином она часто располагается в /user/hive/warehouse). Воспользуемся командой hdfs dfs -ls что бы посмотреть подпапки, относящиеся к кажой подпапке. Добравшись до последней папки и воспользовавшись командой hdfs dfs -cat для просмотра содержимого файла, мы увидим данные в CSV формате, ставшие результатом выполнения INSERT.
Не покидая командной строки Linux, выполним hdfs dfs -mkdir для создания нескольких папок на HDFS с данным за пределами рабочей папки Impala (расположение может отличаться, в нашем случае это /user/impala/warehouse). В зависимости от настроек, возможно придется авторизоваться под пользоватлем, обладающим правами на запись в этой папке HDFS; Ниже приведен пример команд, которые нужно выполнить с правами такого пользователя.
Мы создаем небольшой CSV файл, с данными отличными от тех что были добавлены с помощью INSERT. Создадим копии этого файла во всех подпапках, использующихся для партиционирования.
Снова запустив интерпретатор impala-shell, переместив таблицу контролируемую Impala и с помощью оператора LOCATION создадим новую внешнюю таблицу, указывающую на на только что созданную папку, содержащую папки с данными.
Так как подпапки-партиции были добавлены после содания таблицы, для того что бы они данные в них доступны Impala, каждую из них необходимо идентифицировать помощью ALTER TABLE.
Используем выражение REFRESH каждый раз когда была добавлена, изменана или удалена хотя бы одна из партиций. Данные готовы для выполнения запросов. Выражение SELECT * показывает, что рновые данные успешно распознаны в каждой из папок. Выведено всего несколько строчек так как мы воспользовались оператором LIMIT на случай если будет получено больше данных чем мы ожидаем.
Внимание! Этот перевод, возможно, ещё не готов.
Его статус: идёт перевод
Переведено на Нотабеноиде
http://notabenoid.org/book/53374/230033
Переводчики: nipman
Настройки
Готово:
