将列标题添加到配置单结果集

时间:2013-02-28 15:37:40

标签: amazon-s3 hive amazon-emr

我在Amazon EMR上使用hive脚本来分析一些数据。

我正在将输出传输到Amazon s3存储桶。现在,hive脚本的结果不包含列标题。

我也尝试过使用它:

 set hive.cli.print.header=true;

但它没有帮助。你能救我一下吗?

4 个答案:

答案 0 :(得分:8)

您的hive脚本究竟是什么样的?

hive脚本的输出是否包含标题数据?将输出复制到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

答案 1 :(得分:3)

我猜这种直接方式仍然不可能(HIve: writing column headers to local file?)。 一些解决方案是DESCRIBE table_name到文件的导出结果:

$ hive -e 'DESCRIBE table_name' > file

编写一些脚本,将列名添加到数据文件中。 GL!

答案 2 :(得分:2)

我今天遇到了这个问题,并且能够通过在原始查询和创建标题行的新虚拟查询之间执行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

它有点笨重,但至少你可以通过一次查询得到你需要的东西。

希望这有帮助!

答案 3 :(得分:-1)

这可能只是一个拼写错误(或依赖于版本的更改),但以下内容适用于我:

set hive.cli.print.headers=true;

这是“标题”而不是“标题”