hive1.1.0-cdh5.16.2
sqoop 1.4.7
通過如下語句修改分隔符,(網上很多文章只修改了一處,無法識別sqoop過來的資料)
#修改分隔符為逗號 ,
alter table table_name set serdeproperties (
'field.delim'
=
',' , 'serialization.format'=','
);
#修改分隔符為\001,在linux的vim中顯示為^a,是hive預設的分隔符
alter table table_name set serdeproperties (
'field.delim'
=
'\001' , 'serialization.format'='\001'
);
#修改分隔符為製表符\t
alter table table_name set serdeprope
rties ('field.delim'
=
'\t' , 'serialization.format'='\t'
);
alter語法修改分隔符只針對於後續新增資料有效,拿分割槽表而言,比如現在有2個分割槽,day=2020-05-01,day=2020-05-02,分隔符是\t, 通過alter把分隔符改為\001,再寫入寫的分割槽day=2020-05-031.建一張分割槽表,指定分隔符為\t可以通過desc formatted tablename partition(key=value)語法檢視每個分割槽的分隔符,那麼2020-05-01,2020-05-02的分割槽依然是\t分隔符,2020-05-03分割槽的分隔符是\001;而且可以通過hive正常讀寫操作這三個分割槽而不會出現任何問題
通過desc formatted table檢視該錶的分隔符,發現已經變為\001
create table `tmp.test0506_sqoop`(
`id` bigint,
`seq_no` string,
`name` string,
`e_type` string,
`status` string)
partitioned by (`day` string) row format delimited fields terminated by '\t'
lines terminated by '\n' stored as textfile;
2.通過sqoop導資料進來,指定分隔符為\t
sqoop import \
--mapreduce-job-name sqoop_table_*** \
--hive-drop-import-delims \
--connect "$" \
--username $ \
--password '$' \
--hive-overwrite \
--hive-import \
--split-by id \
--boundary-query 'select min(id),max(id) from ***' \
--hive-table tmp.test0506_sqoop \
--query 'select id,seq_no,name,e_type,status from *** where $conditions' \
--target-dir /tmp/sqoop_test0506_sqoop_`date +%s` \
--fields-terminated-by '\t' \
--hive-partition-key day \
--hive-partition-value '2020-05-01'
3.通過alter語法修改表的分隔符為\001
alter table tmp.test0506_sqoop set serdeproperties ('field.delim' = '\001' , 'serialization.format'='\001');
4.繼續用sqoop導資料,指定分隔符為\001
sqoop import \
--mapreduce-job-name sqoop_table_*** \
--hive-drop-import-delims \
--connect "$" \
--username $ \
--password '$' \
--hive-overwrite \
--hive-import \
--split-by id \
--boundary-query 'select min(id),max(id) from ***' \
--hive-table tmp.test0506_sqoop \
--query 'select id,seq_no,name,e_type,status from *** where $conditions' \
--target-dir /tmp/sqoop_test0506_sqoop_`date +%s` \
--fields-terminated-by '\001' \
--hive-partition-key day \
--hive-partition-value '2020-05-02'
5.檢視表,分割槽的分隔符
desc formatted tmp.test0506_sqoop;
| storage desc params:
| field.delim | \u0001
| line.delim | \n
| serialization.format | \u0001
desc formatted tmp.test0506_sqoop partition(day='2020-05-01');
| storage desc params:
| field.delim | \t
| line.delim | \n
| serialization.format | \t
desc formatted tmp.test0506_sqoop partition(day='2020-05-02');
| storage desc params:
| field.delim | \u0001
| line.delim | \n
| serialization.format | \u0001
6.檢視表資料,資料顯示正常
select * from tmp.test0506_sqoop where day='2020-05-01' limit 2;
select * from tmp.test0506_sqoop where day='2020-05-02' limit 2;
Hive的列分隔符和行分隔符
在建立hive表時,預設行分隔符 a 列分隔符 n 這兩項也是可以設定的。在實際開發中,一般預設使用預設的分隔符,當然有些場景下也會自定義分隔符。spark hive use test db 建立外部表 create external table test tb user id bigint com...
hive實現多分隔符
一 測試外表 create external 外表標識 table tmp.deli tmp 0117 z1 string,z2 string partitioned by pt string comment yyyymm row format serde org.apache.hadoop.hiv...
hive的列分隔符和行分隔符的使用
目錄 一 hive中預設的分割符如下 二 分隔符的指定與使用 三 建好表之後更改字段分隔符 分隔符描述 n 行分隔符 a欄位分隔符 001 barray struct的元素間的分隔符,map的鍵值對與鍵值對間分隔符 002 cmap中鍵與值之間的 分隔符 003 hive中在建立表時,一般會根據匯入...