HIVE匯出到HDFS沒有分割符解決方案
阿新 • • 發佈:2019-01-07
困擾了我一天的問題,假設有一個表,要對他的資料進行一些處理,處理後將他直接匯出到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,將我們的資料,放到這個表裡面,這樣後就可以得到一個帶有分割符的了結果啦。
如果有沒看懂什麼的同學,可以留言交流,如果時間允許的話可以寫的小教程,圖文並茂的。
好了,下班了~