在使用hive的時候,分隔符是必不可少的,當學習的時候使用的都是常規分隔符,好比:逗號「,」、豎線「|」等,這些鍵盤上均可以直接輸入的字符,可是這些字符只要是鍵盤上的,在針對複雜的業務邏輯的時候,都會失效。sql
好比你有一個備註字段,這個字段容許用戶輸入輸入鍵盤上的任何字符,一旦用戶輸入了你選擇的分隔符,那麼Hive在使用這個數據的時候,就會致使hive表中的字段錯位。vim
使用多個組合字符,也能夠成爲一種選擇,可是有些導入導出工具,不支持多字符分隔符,好比:阿里的DATAX就不支持多字符分隔符。bash
那麼如今咱們就須要一種字符,是用戶輸入不了的,計算機又存在的字符,下面這些字符則能夠知足需求!服務器
如下這些字符是能夠在Hive中應用,而且DATAX也支持的:工具
char | digraph | hex | dec | official name | Unicode |
---|---|---|---|---|---|
^@ | NU | 0x00 | 0 | NULL (NUL)N | \u0000 |
^A | SH | 0x01 | 1 | START OF HEADING (SOH) | \u0001 |
^B | SX | 0x02 | 2 | START OF TEXT (STX) | \u0002 |
^C | EX | 0x03 | 3 | END OF TEXT (ETX) | \u0003 |
^D | ET | 0x04 | 4 | END OF TRANSMISSION (EOT) | \u0004 |
^E | EQ | 0x05 | 5 | ENQUIRY (ENQ) | \u0005 |
^F | AK | 0x06 | 6 | ACKNOWLEDGE (ACK) | \u0006 |
^G | BL | 0x07 | 7 | BELL (BEL) | \u0007 |
^H | BS | 0x08 | 8 | BACKSPACE (BS) | \u0008 |
^I | HT | 0x09 | 9 | CHARACTER TABULATION (HT) | \u0009 |
^@ | LF | 0x0a | 10 | LINE FEED (LF) | \u0010 |
^K | VT | 0x0b | 11 | LINE TABULATION (VT) | \u0011 |
^L | FF | 0x0c | 12 | FORM FEED (FF) | \u0012 |
^M | CR | 0x0d | 13 | CARRIAGE RETURN (CR) | \u0013 |
注意:特殊符號中的^ 和鍵盤上的^ 字符是不同的。另外特殊符號中的^和後面跟的字符是一體的,也就是說,兩個字符是一個符號。oop
Vim中顯然沒有什麼特殊字符選擇工具,但提供了兩種輸入特殊字符的方式:學習
其中digraph是一種相似雙拼的方法,連續輸入兩個字符來表示一個特殊字符。須要先按下前導鍵<Ctrl-K>,例如在編輯模式下輸入:測試
<Ctrl-K>Rg
如上的輸入,將會出現®字符,其中"Rg"是該字符的digraph(雙拼)。編碼
特殊字符表中的digraph列就是這些字符的雙拼輸入字符,輸入時注意大小寫,雙拼輸入是區分大小寫的。.net
在Windows中是沒法輸入特殊字符的,可使用Unicode碼進行輸入。
例如:要使用^A做爲分割字符能夠這樣寫:
create external table city(city_id string,city_name string ) row format delimited fields terminated by '\u0001' location 'hdfs://hadoop01:8090/test/city';
建表語句:
create external table city(city_id string,city_name string,pinyin string,pingying2 string,code string,db_name string,city_status string,default_areas string,yum_city_name string) row format delimited fields terminated by '\u0000' location 'hdfs://hadoop01:8090/test/city';
如上的代碼本人使用的^@字符做爲分隔符的。
如下是Eclipse鏈接Hadoop查看的數據格式樣例:
將此文件直接傳到Linux服務器中,使用vim打開,能夠發現,字段之間的分隔符以下:
Hive查詢出來的數據樣例:
這裏須要說一下,在特殊字符表中有兩個^@ 符號,通過本人測試,這兩個符號在做爲分隔符的時候是同樣的,能夠認爲是同樣的。只是輸入的時候不同。
在Linux系統中,文本文件中是存在隱藏字符的,須要使用如下命令才能查看到:
命令以下:
cat -A fileName
使用vim進入編輯文件的命令模式,使用如下命令:
set list #顯示隱藏字符 set nolist #取消顯示隱藏字符
上一篇:Hive應用:設置字段默認值
下一篇:Hive語法:union