Sqoop匯入hive分隔符問題

2021-07-24 23:47:18 字數 882 閱讀 4901

sqoop從oracle匯入資料到hive,示例:

[plain]view plain

copy

sqoop import --connect jdbc:oracle:thin:@oracle-host:port:orcl --username name--password passwd --hive-import -table tablename  

如果不加其他引數,匯入的資料預設的列分隔符是'\001',預設的行分隔符是'\n'。

這樣問題就來了,如果匯入的資料中有'\n',hive會認為一行已經結束,後面的資料被分割成下一行。這種情況下,匯入之後hive中資料的行數就比原先資料庫中的多,而且會出現資料不一致的情況。

sqoop也指定了引數--fields-terminated-by--lines-terminated-by來自定義行分隔符和列分隔符。

可是當你真的這麼做時.........o(╯□╰)o就會出現如下錯誤:

[plain]view plain

copy

info hive.hiveimport: failed: semanticexception 1:381 lines terminated by only supports newline '\n' right now.  

也就是說雖然你通過

--lines-terminated-by

指定了其他的字元作為行分隔符,但是hive只支援'\n'作為行分隔符。

簡單的解決辦法就是加上引數--hive-drop-import-delims來把匯入資料中包含的hive預設的分隔符去掉。

hive表分隔符修改實操 相容sqoop

hive1.1.0 cdh5.16.2 sqoop 1.4.7 通過如下語句修改分隔符,網上很多文章只修改了一處,無法識別sqoop過來的資料 修改分隔符為逗號 alter table table name set serdeproperties field.delim serialization....

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...