Hive建表時指定分隔符或使用多字元分隔

2021-09-24 03:41:10 字數 1452 閱讀 9681

不知道你是否會有會這樣的苦惱,就是從hdfs或者file中匯入資料到hive建數倉的時候,因為資料是資料流前段的小gg用特殊符號分隔的,然後導致你匯入資料時一臉矇圈?

這篇教程可能會幫到你。

首先我們明確,我們是在建表的時候就指定了匯入資料時的分隔符的,建表的時候會有三種場景需要考慮:

1、正常建表(default);

2、指定特定的特殊符號作為分隔符;

3、使用多字元作為分隔符;

一、正常建表,採用預設的分隔符:

hive 預設的字段分隔符為ascii碼的控制符\001,建表的時候用fields terminated by '\001',如果要測試的話,造資料在vi 開啟檔案裡面,用ctrl+v然後再ctrl+a可以輸入這個控制符\001。按順序,\002的輸入方式為ctrl+v,ctrl+b。以此類推。

二、指定特定的特殊符號作為分隔符:

create table test(id int, name string ,tel string) row format delimited fields terminated by '\t'lines terminated by '\n'stored as textfile;
上面使用了'\t'作為了字段分隔符,'\n'作為換行分隔符。如果有特殊需求,可以自己動手改一下這兩個符號就行了。

三、使用多字元作為分隔符:

假設我們使用【##】來作為字段分隔符,【\n】作為換行分隔符,則這裡有兩個方法:

1、使用multidelimitserde的方法來實現:

create table test(id int, name string ,tel string) row format serde 'org.apache.hadoop.hive.contrib.serde2.multidelimitserde' with serdeproperties ("field.delim"="##") lines terminated by '\n'stored as textfile;
2、使用regexserde的方法實現:

creaet table test(id int, name string ,tel string) row format serde 'org.apache.hadoop.hive.contrib.serde2.regexserde' with serdeproperties ("input.regex" = "^(.*)\\#\\#(.*)$") lines terminated by '\n'stored as textfile;
至於你要用什麼特殊符號,就依瓢畫葫蘆應該沒問題,有什麼問題可以發出來一起討論下。

上面應該能夠說明和解決問題了。

hive建立table時指定分隔符

由於很多資料在hadoop平台,當從hadoop平台的資料遷移到hive目錄下時,由於hive預設的分隔符是 u0001,為了平滑遷移,需要在建立 時指定資料的分割符號,語法如下 create table test uid string,name string row format delimite...

hive的列分隔符和行分隔符的使用

目錄 一 hive中預設的分割符如下 二 分隔符的指定與使用 三 建好表之後更改字段分隔符 分隔符描述 n 行分隔符 a欄位分隔符 001 barray struct的元素間的分隔符,map的鍵值對與鍵值對間分隔符 002 cmap中鍵與值之間的 分隔符 003 hive中在建立表時,一般會根據匯入...

python print 使用分隔符 或行尾符

使用print 函式輸出資料,但是想改變預設的分隔符或者行尾符。print acme 50 91.5 acme 50 91.5 print acme 50 91.5 sep acme,50,91.5 print acme 50 91.5 sep end n acme,50,91.5 使用end 引數...