【问题标题】:Configuring delimiter for Hive MR Jobs为 Hive MR 作业配置分隔符
【发布时间】:2012-07-03 05:55:52
【问题描述】:

有没有办法为 Hive MR Jobs 配置分隔符? hive 内部使用的默认分隔符是“hive delimiter”(/001)。我的用例是配置分隔符,以便我可以根据要求使用任何分隔符。在hadoop中有一个属性“mapred.textoutputformatter.separator”,它将键值分隔符设置为此属性指定的值..有没有这样的方法来配置Hive中的分隔符?..我搜索了很多但没有没有任何有用的链接。请帮帮我。

【问题讨论】:

    标签: hive


    【解决方案1】:

    从 hive-0.11.0 开始,您可以编写

    INSERT OVERWRITE LOCAL DIRECTORY '...'
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
    SELECT ...
    

    完整语法请参见HIVE-3682

    【讨论】:

      【解决方案2】:

      你可以试试:

      SELECT (rest of your query)
      ROW FORMAT DELIMITED
          FIELDS TERMINATED BY 'YourChar' (example: FIELDS TERMINATED BY '\t')
      

      【讨论】:

      • 感谢您的快速回复。但这里的问题是,我们正在将 hive MR o/p 写入 dfs 位置。如果 hive 使用分隔符作为 '\001',那么可能有一些方法可以显式配置它,比如通过设置一些属性,..
      【解决方案3】:

      你也可以使用这个:-

      ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
      WITH SERDEPROPERTIES ('field.delim'='-','serialization.format'='-')
      

      这将使用 - delimiter 分隔列,但它特定于 LazSimpleSerde

      【讨论】:

        【解决方案4】:

        我猜你正在使用 INSERT OVERWRITE DIRECTORY 选项写入 hdfs 文件。 如果您在 hdfs 文件的顶部创建一个没有分隔符的 hive 表,它将以 '\001' 作为分隔符,因此您可以从 hive 表中毫无问题地读取文件

        【讨论】:

          【解决方案5】:

          如果您源表 dnt 未在创建模式语句中指定分隔符,那么您将无法更改它。您的操作将始终包含默认值。是的,分隔符将由为源表创建模式来控制。所以这也不是可配置的。 我遇到了类似的问题,最终在完成 hive MR 工作后修改 001 作为第二步。

          【讨论】:

            猜你喜欢
            • 2019-08-01
            • 2018-01-16
            • 2018-06-15
            • 2019-02-05
            • 2019-02-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多