sqoop export 分隔符問題

2021-10-01 02:28:43 字數 1846 閱讀 7009

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指令碼中的乙個重要概念,在處理文字資料時...