2016-06-22 64 views
0

我正在嘗試使用Sqoop將NFL播放結果的MySQL表導入HDFS。我發出以下命令來實現這一目標:Sqoop導入將TINYINT轉換爲BOOLEAN

sqoop import \ 
--connect jdbc:mysql://127.0.0.1:3306/nfl \ 
--username <username> -P \ 
--table play 

不幸的是,TINYINT類型的列,目前正在導入時轉換爲布爾值。例如,該遊戲發生在哪一季度的「四分之一」列。如果該遊戲發生在第一季度,則該列中的值被轉換爲「真」,否則轉換爲「假」。

事實上,我做了一個sqoop import-all-tables,導入了我擁有的整個NFL數據庫,並且它的行爲如此均勻。

有沒有辦法解決這個問題,或者是importimport-all-tables可以防止這種情況發生?

+0

每個表列中的映射具有使用地圖柱 - 蜂房 –

+0

這是發生不論我使用蜂房的單獨處理。我的HDFS主目錄中的文件(例如,運行上述Sqoop作業之後)也出現這種現象。 – user4601931

回答

3

在您的JDBC連接URL中添加tinyInt1isBit=false。像

jdbc:mysql://127.0.0.1:3306/nfl?tinyInt1isBit=false

另一種解決方案的東西將是明確地覆寫的數據類型TINYINT(1)列的列映射。例如,如果列名稱爲foo,則在導入期間將以下選項傳遞給Sqoop:--map-column-hive foo=tinyint。如果非Hive導入HDFS,請使用--map-column-java foo=integer

Source