【问题标题】:How do I create a tab separated file from a hive query?如何从配置单元查询中创建制表符分隔文件?
【发布时间】:2014-12-08 21:24:17
【问题描述】:

我正在尝试从配置单元查询中创建一个制表符分隔值。

根据 Apache Hive wiki,我将查询编写为:

INSERT OVERWRITE LOCAL DIRECTORY '/home/luca/query_results/'
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY  '\t' ESCAPED BY '"' LINES TERMINATED BY '\n' 
STORED AS TEXTFILE
SELECT * FROM mytable ;

(请注意,真正的查询非常复杂,我知道在这个简单的情况下我可以使用hive -e "Select * from mytable > output)。

查询似乎有效,但在 query_results 目录中,我找到了一个扩展名为 .snappy 的文件,当我打开它时,它似乎是一个二进制文件,而不是文本文件。

我的查询有什么问题?如何在格式良好的文本文件中获取查询结果(我想编写一个返回多个此类文件的配置单元脚本。如果我什至可以从配置单元中指定文件的名称,那将是一个奖励)。

【问题讨论】:

  • 我猜禁用 snappy 压缩可以解决 .snappy 文件问题。set hive.exec.compress.output=false;
  • @KSNidhin 谢谢,我不知道这一点。所以我现在还有两个问题:p 因为查询需要很多时间,是否可以解压缩我已经创建的 .snappy 文件?对于接下来的查询,我可以指定文件名而不是目录吗?
  • @KSNidhin 你能发表你的评论作为答案吗?我相信这是一个实际的答案
  • @arghtype 我打算再次尝试查询,如果它有效,我也会问 KSNidhin :)
  • @lucacerone 您可以在不运行实际查询的情况下检查这一点:在 hive 客户端中运行“set hive.exec.compress.output”,如果它返回 true,则表明您启用了默认压缩

标签: insert save hive create-table tsv


【解决方案1】:

添加评论作为答案

.snappy 文件问题可以通过取消压缩来解决。 使用以下内容:

      set hive.exec.compress.output=false

曾经的 snappy 压缩文件由于其编码结构而无法解压缩。

上述压缩属性可以在 hive-site.xml 中永久设置,也可以在每次运行插入查询时手动设置

【讨论】:

  • 谢谢,我注意到插入覆盖创建的文件没有标题(我已经设置了配置单元值以在我的查询中包含标题,有什么方法可以将它包含在使用插入覆盖导出的表?)
  • 我认为 hive 现在不支持这一点。因为它更关注数据而不是元数据,可以单独找到。
  • 如果您的 Metastore 是在 Mysql 中配置的,您可以在 Metastore DB 中获取 TBLS、DBS 表
【解决方案2】:

要打开 .snappy 扩展,我们需要在查询中使用文本语法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多