Как сохранить результаты запроса импалы
Я загрузил большой набор данных из S3 в hdfs, а затем вставил данные в таблицу в Impala.
Затем я запустил запрос к этим данным и надеюсь вернуть эти результаты в S3.
Я использую Amazon EMR, с импала 1.2.4. Если невозможно получить результаты запроса обратно на S3 напрямую, есть ли варианты вернуть данные в hdfs, а затем каким-то образом отослать их обратно на S3 оттуда?
Я возился с impala-shell -o filename
параметры, но это, кажется, работает только в локальной файловой системе Linux.
Я думал, что это был бы распространенный сценарий, но у меня были проблемы с поиском какой-либо информации о сохранении результатов запроса где-либо.
Любые указатели приветствуются.
3 ответа
Чтобы добавить к знаниям выше, я включаю команду, которая записывает результаты запроса в файл с разделителем, как мы объявили, используя опцию --output_delimeter, а также используя опцию --delimeted, которая фактически отключает опцию разделителя вкладок по умолчанию.
impala-shell -q "query " --delimited --output_delimiter='\001' --print_header -o 'filename'
Что я обычно делаю, если это небольшой набор результатов, запускаю скрипт из командной строки, а затем загружаю его на s3 с помощью инструмента командной строки AWS:
impala-shell -e "select ble from bla" -o filename
aws s3 cp filename s3://mybucket/filename
Альтернативой является использование Hive в качестве последнего шага в конвейере данных после выполнения запроса в Impala:
1. Импала шаг:
create table processed_data
as
select blah
--do whatever else you need to do in here
from raw_data1
join raw_data2 on a=b
2. Шаг улья:
create external table export
like processed_data
location 's3://mybucket/export/';
insert into table export
select * from processed_data;
Если у вас установлен aws cli, вы можете использовать стандартную оболочку Impala, запрос оболочки impala | aws cli cp - s3folder/outputfilename Вы можете использовать unix pipe и stream (-)