Hive的列分隔符和行分隔符
在創(chuàng)建Hive表時(shí),默認(rèn)行分隔符"^A",列分隔符"\n",這兩項(xiàng)也是可以設(shè)置的。在實(shí)際開發(fā)中,一般默認(rèn)使用默認(rèn)的分隔符,當(dāng)然有些場(chǎng)景下也會(huì)自定義分隔符。
創(chuàng)建表1:
spark-hive use test_db;# 創(chuàng)建外部表 CREATE EXTERNAL TABLE test_tb ( user_id bigint COMMENT '用戶ID', user_name string COMMENT '用戶名' ) LOCATION '/home/test_db/test_tb' ;查看表1:
show create table test_tb; 20/04/13 11:47:49 INFO SparkHiveShell: current SQL: show create table test_tb CREATE EXTERNAL TABLE `test_tb`(`user_id` bigint COMMENT '用戶ID',`user_name` string COMMENT '用戶名') ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' # 默認(rèn)分隔符,行分割符:"\n",列分割符:"^A" STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' # 默認(rèn)存儲(chǔ)格式textfile OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' # HDFS存儲(chǔ)目錄 LOCATION'hdfs://namenode.xxx.com:9000/home/test_db/test_tb' TBLPROPERTIES ('transient_lastDdlTime'='1586749208') Time taken: 1.702 s創(chuàng)建表2:
CREATE EXTERNAL TABLE test_tb_2 ( user_id bigint COMMENT '用戶ID', user_name string COMMENT '用戶名' ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' LOCATION '/home/test_db/test_tb_2' ;查看表2:
show create table test_tb_2; 20/04/13 11:55:22 INFO SparkHiveShell: current SQL: show create table test_tb_2 CREATE EXTERNAL TABLE `test_tb_2`(`user_id` bigint COMMENT '用戶ID', `user_name` string COMMENT '用戶名') ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' # 列分割符,表2的列分割符為:"\t"LINES TERMINATED BY '\n' # 行分割符,表2的行分隔符為:"\n" STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION'hdfs://namenode.xxx.com:9000/home/test_db/test_tb_2' TBLPROPERTIES ('transient_lastDdlTime'='1586749805') Time taken: 2.485 s從如上兩個(gè)例子中可以看出:Hive默認(rèn)的列分隔符類型為“org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe”。
Hive中默認(rèn)的列分割符為:"^A"(CTRL+V,CTRL+A),在數(shù)據(jù)文件中為:"1^AJom\n",如果需要自定義分隔符,需要設(shè)置 "ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'",因?yàn)閊A八進(jìn)制編碼為“\001”,如果使用默認(rèn)的分隔符,可以不加此參數(shù)。
Hive中默認(rèn)行分隔符為"\n",也可以通過(guò)"LINES TERMINATED BY '\n' "來(lái)設(shè)置。
一般來(lái)說(shuō)Hive默認(rèn)行分隔符為換行符,如果非要自定義分隔符,可以通過(guò)定義INPUTFORMAT和OUTPUTFORMAT類來(lái)指定特定的(行|列)分隔符。
提示
使用時(shí)需要注意:數(shù)據(jù)中如果包含:"\001","\n"等分隔符,需要提前處理掉。正常在HQL中我們需要REGEXP_REPLACE(字段,'\r|\n|\r\n|\001|\002|\003|\t', '')把常用的分隔符轉(zhuǎn)移掉,免得帶來(lái)串列,斷行的困擾。
?
?
總結(jié)
以上是生活随笔為你收集整理的Hive的列分隔符和行分隔符的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Druid 分析报表中的实战(二)
- 下一篇: Go语言 可变参数