【sqoop隱藏bug】sqoop從mysql導到hive時tinyint(1)格式自動變成Boolean解決方案

官網原文:

27.2.5. MySQL: Import of TINYINT(1) from MySQL behaves strangely
Problem: Sqoop is treating TINYINT(1) columns as booleans, which is for example causing issues with HIVE import. This is because by default the MySQL JDBC connector maps the TINYINT(1) to java.sql.Types.BIT, which Sqoop by default maps to Boolean.

Solution: A more clean solution is to force MySQL JDBC Connector to stop converting TINYINT(1) to java.sql.Types.BIT by adding tinyInt1isBit=false into your JDBC path (to create something like jdbc:mysql://localhost/test?tinyInt1isBit=false). Another solution would be to explicitly override the column mapping for the datatype TINYINT(1) column. For example, if the column name is foo, then pass the following option to Sqoop during import: --map-column-hive foo=tinyint. In the case of non-Hive imports to HDFS, use --map-column-java foo=integer.

附官網鏈接:
官網原文地址

Mysql中存在tinyint(1)時,在數據導入到HDFS時,該字段默認會被轉化爲boolean數據類型。導致數據內容丟失。
解決方案:
1 在jdbc的連接後面加上:tinyInt1isBit=false
–connect jdbc:mysql://192.168.9.80:3306/kgc_behivour_log?tinyInt1isBit=false

2 另外,還有一種解決方案是顯式覆蓋數據類型TINYINT(1)列的列映射。例如,如果列名爲foo,則在導入期間將以下選項傳遞給Sqoop: – map-column-hive foo = tinyint。
在非Hive導入HDFS的情況下,使用–map-column-java foo = integer

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章