Добавление заголовков столбцов в набор результатов куста

Я использую скрипт улья в 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;

Это "заголовки" вместо "заголовок"

Другие вопросы по тегам