1. 程式人生 > >HIVE匯出到HDFS沒有分割符解決方案

HIVE匯出到HDFS沒有分割符解決方案

困擾了我一天的問題,假設有一個表,要對他的資料進行一些處理,處理後將他直接匯出到HDFS上,但是匯出後檢視資料會發現,沒有分隔符分開都是密密麻麻的字母數字。

之後查詢資料後再新增

Insert overwrite directory ‘\dir’
Row format delimited 
Fileds terminated by ‘\t’
Select *from table_name;

(*為要進行處理的資料,這裡用*代替)

結果出現 cannot recognize input near 'row' 'format' 'delimited' in select clause錯誤

查閱資料後發現原因是這種方法只適用於local也就是 Insert overwrite local directory ‘\dir’

儲存到HDFS並不適用

之後經過大神的指點用另外一種方法,來進行新增分隔符,

思路是對處理後的資料格式建立一新的表

根據HIVE的DDL可以觀察到

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
  [(col_name data_type [COMMENT col_comment], ...)]
  [COMMENT table_comment]
  [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
  [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
  [
   [ROW FORMAT row_format] [STORED AS file_format]
   | STORED BY 'storage.handler.class.name' [ WITH SERDEPROPERTIES (...) ]  (Note:  only available starting with 0.6.0)
  ]
  [LOCATION hdfs_path]
  [TBLPROPERTIES (property_name=property_value, ...)]  (Note:  only available starting with 0.6.0)
  [AS select_statement]  (Note: this feature is only available starting with 0.5.0.)

標紅部分,這裡我可以把表的儲存位置放在HDFS,再對其進行’\t’的分割符設定,

處理好資料,我們可以將處理後的資料匯出到Hive中的剛才新建的表中insert into table,將我們的資料,放到這個表裡面,這樣後就可以得到一個帶有分割符的了結果啦。

如果有沒看懂什麼的同學,可以留言交流,如果時間允許的話可以寫的小教程,圖文並茂的。

好了,下班了~