Sqoop 导入将 TINYINT 转换为 BOOLEAN

Sqoop import converting TINYINT to BOOLEAN

我正在尝试使用 Sqoop 将 MySQL table 的 NFL 比赛结果导入 HDFS。我发出了以下命令来实现这一点:

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

不幸的是,有 TINYINT 类型的列在导入时被转换为布尔值。例如,有一个 'quarter' 列表示比赛发生在比赛的哪个季度。如果比赛发生在第一节,则此列中的值将转换为 'true' 和 'false'除此以外。

事实上,我做了一个 sqoop import-all-tables,导入了我拥有的整个 NFL 数据库,它的行为是这样的。

是否有解决此问题的方法,或者 importimport-all-tables 的一些论据可以防止这种情况发生?

在您的 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