2012-07-03 45 views
3

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

回答

0

你可以试试:

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

感谢您的快速回复。但问题在于,我们正在将配置单元MR o/p写入dfs位置。如果配置单元使用分隔符作为'\ 001',那么可能有一些方法可以明确配置它,比如通过设置一些属性。 –

1

由于蜂巢-0.11.0的,你可以写

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

的完整语法见HIVE-3682

0

您也可以使用此: -

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

这会分开使用列 - 定界符但具体到LazSimpleSerde

0

我想你正在使用INSERT OVERWRITE DIRECTORY选项来写入hdfs文件。 如果在没有分隔符的hdfs文件的顶部创建一个配置单元表,那么将以'\ 001'作为分隔符,因此您可以从配置单元表中读取文件而不会出现任何问题

0

如果您将源表dnt不是在create schema语句中指定分隔符,那么您将无法更改该分隔符。您操作将始终包含默认值。是的,分隔符将由源表的创建模式控制。所以这也不是可配置的。 我有一个类似的问题,并最终修改001完成配置单元MR作业后的第二步。