2012-07-03 71 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作業後的第二步。