Добавление заголовков столбцов в набор результатов куста
Я использую скрипт улья в Amazon EMR для анализа некоторых данных.
И я переношу вывод в Amazon s3 bucket. Теперь результаты скрипта куста не содержат заголовков столбцов.
Я также пытался использовать это:
set hive.cli.print.header=true;
Но это не помогает. Можете ли вы помочь мне?
4 ответа
Как выглядит сценарий вашего улья?
Есть ли в выводе из вашего скрипта улья данные заголовка? Это тогда теряется, когда вы копируете вывод в ваше ведро s3?
Если бы вы могли предоставить более подробную информацию о том, что именно вы делаете, это было бы полезно.
Не зная этих деталей, вот что вы можете попробовать.
Создайте свой скрипт улья следующим образом:
USE dbase_name:
SET hive.cli.print.header=true;
SELECT some_columns FROM some_table WHERE some_condition;
Затем запустите ваш скрипт:
$ hive -f hive_script.hql > hive_output
Затем скопируйте ваш вывод в ваше ведро s3
$ aws s3 cp ./hive_output s3://some_bucket_name/foo/hive_output
Я думаю, что прямой путь все еще невозможен ( HIve: запись заголовков столбцов в локальный файл?). Некоторым решением будет результат экспорта DESCRIBE table_name
в файл:
$ hive -e 'DESCRIBE table_name' > file
И напишите некоторый скрипт, который добавляет имена столбцов в ваш файл данных. GL!
Я столкнулся с этой проблемой сегодня и смог получить то, что мне нужно, выполнив UNION ALL между исходным запросом и новым фиктивным запросом, который создает строку заголовка. Я добавил столбец сортировки в каждом разделе и установил заголовок на 0, а данные на 1, чтобы я мог отсортировать по этому полю и убедиться, что строка заголовка вышла сверху.
create table new_table as
select
field1,
field2,
field3
from
(
select
0 as sort_col, --header row gets lowest number
'field1_name' as field1,
'field2_name' as field2,
'field3_name' as field3
from
some_small_table --table needs at least 1 row
limit 1 --only need 1 header row
union all
select
1 as sort_col, --original query goes here
field1,
field2,
field3
from
main_table
) a
order by
sort_col --make sure header row is first
Это немного громоздко, но, по крайней мере, вы можете получить то, что вам нужно, с помощью одного запроса.
Надеюсь это поможет!
Это может быть просто опечатка (или изменение в зависимости от версии), но у меня работает следующее:
set hive.cli.print.headers=true;
Это "заголовки" вместо "заголовок"