sqoop 匯出如果分隔符指定的不對會導致hive 進sqoop 資料不能正確的分隔,會造成匯出任務失敗。
在使用hive的時候,分隔符是必不可少的,當學習的時候使用的都是常規分隔符,比如:逗號「,」、豎線「|」等,這些鍵盤上都可以直接輸入的字元,但是這些字元只要是鍵盤上的,在針對複雜的業務邏輯的時候,都會失效。
比如你有乙個備註字段,這個字段允許使用者輸入輸入鍵盤上的任何字元,一旦使用者輸入了你選擇的分隔符,那麼hive在使用這個資料的時候,就會導致hive表中的字段錯位。
使用多個組合字元,也可以成為一種選擇,但是有些匯入匯出工具,不支援多字元分隔符,比如:阿里的datax就不支援多字元分隔符。
那麼現在我們就需要一種字元,是使用者輸入不了的,計算機又存在的字元,下面這些字元則可以滿足需求!
以下這些字元是可以在hive中應用,並且datax也支援的:
char
digraph
hexdec
official name
unicode
^@nu
0x00
0null (nul)n
\u0000
^ash
0x01
1start of heading (soh)
\u0001
^bsx
0x02
2start of text (stx)
\u0002
^cex
0x03
3end of text (etx)
\u0003
^det
0x04
4end of transmission (eot)
\u0004
^eeq
0x05
5enquiry (enq)
\u0005
^fak
0x06
6acknowledge (ack)
\u0006
^gbl
0x07
7bell (bel)
\u0007
^hbs
0x08
8backspace (bs)
\u0008
^iht
0x09
9character tabulation (ht)
\u0009
^@lf
0x0a
10line feed (lf)
\u0010
^kvt
0x0b
11line tabulation (vt)
\u0011
^lff
0x0c
12form feed (ff)
\u0012
^mcr
0x0d
13carriage return (cr)
\u0013
注意:特殊符號中的^ 和鍵盤上的^ 字元是不一樣的。另外特殊符號中的^和後面跟的字元是一體的,也就是說,兩個字元是乙個符號。
問題來了 如果hive 的資料中包含這種資料,你不看hdfs 檔案的話,打死也發現不了
在 sqoop 的命令裡新增 -dorg.apache.sqoop.export.text.dump_data_on_error=true
sqoop export -dorg.apache.sqoop.export.text.dump_data_on_error=true \
然後正則匹配替換掉
regexp_replace(m.changed_way,'([\\u0000-\\u0013]+)','')
Hive的列分隔符和行分隔符
在建立hive表時,預設行分隔符 a 列分隔符 n 這兩項也是可以設定的。在實際開發中,一般預設使用預設的分隔符,當然有些場景下也會自定義分隔符。spark hive use test db 建立外部表 create external table test tb user id bigint com...
awk linux 分隔 awk多分隔符
awk的 f引數可以指定新的分隔符,有些時候可能需求指定多個分隔符,比如下面的內容 root n1 netstat an grep estab udp 0 0 192.168.1.120 35570 212.47.249.141 123 established udp 0 0 192.168.1.1...
字段分隔符IFS
ifs internal field seperator 在linux的shell中預設的分隔符,用來把command line分解成word 字段 ifs可以是white space 空白鍵 tab 鍵 enter 回車鍵 中的乙個或幾個。ifs是shell指令碼中的乙個重要概念,在處理文字資料時...