9

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

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

我也试过用这个:

 set hive.cli.print.header=true;

但这无济于事。你能帮我吗?

4

4 回答 4

8

您的配置单元脚本到底是什么样的?

您的配置单元脚本的输出中是否包含标头数据?当您将输出复制到您的 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
于 2014-11-08T15:56:10.473 回答
3

我想直接的方式仍然是不可能的(HIve:将列标题写入本地文件?)。一些解决方案是将结果导出DESCRIBE table_name到文件:

$ hive -e 'DESCRIBE table_name' > file

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

于 2013-03-01T08:43:02.753 回答
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

它有点笨重,但至少您可以通过单个查询获得所需的内容。

希望这可以帮助!

于 2014-08-09T01:44:07.630 回答
-1

这可能只是一个错字(或版本相关的更改),但以下对我有用:

set hive.cli.print.headers=true;

它是“标题”而不是“标题”

于 2017-01-10T15:54:36.203 回答