2016-12-14 95 views
0

我正在使用Sqoop將數據從SQL Server導入到Hive,然後將該數據從Hive導出到另一個SQL Server。 Sqoop導入工作正常,並將VCHAR/NVARCHAR數據類型轉換爲String。Sqoop Hive字符串數據類型到MS SQL服務器類型

我的問題是目標表上定義的最佳列類型是什麼,因爲Hive現在當前將數據類型保存爲字符串?我最初定義了我的大部分列在目標表爲VARCHAR(100),並一直在努力,但現在一些字符串,導出過程中失敗,我也得到:

SQL狀態:22001,錯誤代碼:8152

「java.sql.BatchUpdateException:將字符串或二進制數據截取爲 」。

樣品字符串失敗:

"HEALTH SITE PROVIDERS LLC"|" "|"3435673"|"UHGID0000547777"|"906225"|"\\N"|"\\N"|"\\N" 

顯然這個數據比100爲每列(由分隔欄|)遠遠更少的字符,所以我很困惑,蜂巢/ Sqoop是如何將這個字符串還是在導出過程中完成任何轉換?

我正在考慮將目標表中的列定義爲NVARCHAR(max),但是這有點極端嗎?此外,我還需要有一些列索引以及SQL Server中不允許NVARCHAR(max)。

問候,

回答

1

既然你主要數據VARCHAR(100)類型。沒有必要存儲它是蜂巢的STRING。您可以將VARCHARNVARCHAR保存在Hive的VARCHAR中。

在您的sqoop導入命令中使用--map-column-hive <column-name,hive-type....>

例子:

說COL1是VARCHAR(100)和COL2是NVARCHAR(100)

--map-column-hive col1='varchar(100)',col2='varchar(100)',....


現在,您可以將其導出回其SQL Server表列VARCHAR/NVARCHAR