詳解hive的列分隔符和行分隔符的使用

        hive中在建立表時,通常會根據導入的數據格式來指定字段分隔符和列分隔符。java

       通常導入的文本數據字段分隔符多爲逗號分隔符或者製表符(可是實際開發中通常不用着這種容易在文本內容中出現的的符號做爲分隔符),固然也有一些別的分隔符,也能夠自定義分隔符。有時候也會使用hive默認的分隔符來存儲數據。apache

hive (fdm_sor)> create table fdm_sor.mytest_tmp2(
              >  id int comment'編號',
              >  name string comment '名字'
              >  );
hive (fdm_sor)> show create table mytest_tmp2;
CREATE  TABLE `mytest_tmp2`(
  `id` int COMMENT '編號', 
  `name` string COMMENT '名字')
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' --hive默認的分割方式,即行爲\n,列爲^A
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat'    --hive默認的存儲格式爲textfile
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION                                    --內部表的默認的存儲路徑
  'hdfs://hadoop102:9000/user/hive/warehouse/fdm_sor.db/mytest_tmp2'
TBLPROPERTIES (
  'transient_lastDdlTime'='1526176805')
hive (fdm_sor)> create table  fdm_sor.mytest_tmp3(
              >   id int comment'編號',
              >  name string comment '名字'
              >  )
              >  row format delimited fields terminated by '\001'  --這裏能夠指定別的分隔符,如‘\t’,'$'等分隔符
              >  lines terminated by '\n'
              >  stored as textfile;
 
hive (fdm_sor)> show create table fdm_sor.mytest_tmp3;
OK
createtab_stmt
CREATE  TABLE `fdm_sor.mytest_tmp3`(
  `id` int COMMENT '編號', 
  `name` string COMMENT '編號')
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY '\u0001' 
  LINES TERMINATED BY '\n' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://hadoop102:9000/user/hive/warehouse/fdm_sor.db/mytest_tmp3'
TBLPROPERTIES (
  'transient_lastDdlTime'='1526176859')

     如上能夠看出hive默認的列分割類型爲org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe,而這其實就是^A分隔符,hive中默認使用^A(ctrl+A)做爲列分割符,若是用戶須要指定的話,等同於row format delimited fields terminated by '\001',由於^A八進制編碼體現爲'\001'.因此若是使用默認的分隔符,能夠什麼都不加,也能夠按照上面的指定加‘\001’爲列分隔符,效果同樣。oop

       hive默認使用的行分隔符是'\n'分隔符 ,也能夠加一句:LINES TERMINATED BY '\n' ,加不加效果同樣可是區別是hive能夠經過row format delimited fields terminated by '\t'這個語句來指定不一樣的分隔符,可是hive不可以經過LINES TERMINATED BY '$$'來指定行分隔符,目前爲止,hive的默認行分隔符僅支持‘\n’字符。不然報錯。編碼

hive (fdm_sor)>  create table  fdm_sor.mytest_tm4(
              >   id int comment'編號',
              >  name string comment '名字'
              >  )
              >  lines terminated by '\t';
FAILED: ParseException line 5:1 missing EOF at 'lines' near ')'

        通常來講hive的默認行分隔符都是換行符,若是非要自定義行分隔符的話,能夠經過自定義Inputformat和outputformat類來指定特定行分隔符和列分隔符,通常公司實際開發中也都是這麼幹的,具體使用,見後面博客。spa

       固然如hive中集合數據類型struct ,map,array,也都有默認的字段分隔符,也均可以指定字段分隔符。hive中對於上述三個集合數據類型的默認字段分隔符是^B,八進制體現爲‘\002’,用collection items terminated by '\002'語句來指定分隔符,對於map來講,還有鍵值之間的分割符,能夠用map keys terminated by  '\003'(^C)來指定分隔符。code

相關文章
相關標籤/搜索