sqoop import --connect jdbc:mysql://192.168.160.130:3306/mydb --username root --password jqe6b6 --table news --hive-import --hive-table mydb.news --incremental append --check-column keyword --last-value 0 --split-by text --target-dir /hdfs://zhaosai:9000/user/hive/warehouse/news
时间: 2023-08-05 14:09:05 浏览: 53
根据您提供的 Sqoop 命令,您需要指定一个有效的检查列和拆分列,以便 Sqoop 正确地执行增量导入操作。
在您的命令中,`--check-column` 参数的值设置为 `keyword`,但是这是一个字符类型的列,不适合用作检查列。您需要使用一个可比较且唯一的列来确定哪些行是新的或更新的。一般情况下,我们使用整数类型的自增主键作为检查列。如果您的表没有自增主键,您可以使用一个时间戳列作为检查列,例如更新时间戳。
同时,`--split-by` 参数的值设置为 `text`,但是这也是一个字符类型的列,不适合用作拆分列。拆分列应该是一个数值类型的列,例如整数类型的自增主键。如果您没有适合用作拆分列的数值类型列,可以使用 `--autoreset-to-one-mapper` 参数将并行度设置为 1,以避免拆分数据。
因此,您可以尝试将 `--check-column` 参数的值修改为一个适合用作检查列的整数类型列或时间戳列,例如 `id` 或 `update_time`。如果您没有这样的列,可以考虑使用 `--append` 参数来执行简单的表导入而不是增量导入。另外,您还需要将 `--split-by` 参数的值修改为一个适合用作拆分列的数值类型列,例如 `id`。
例如,命令可以修改为:
```
sqoop import --connect jdbc:mysql://192.168.160.130:3306/mydb --username root --password jqe6b6 --table news --hive-import --hive-table mydb.news --incremental append --check-column id --last-value 0 --split-by id --target-dir /hdfs://zhaosai:9000/user/hive/warehouse/news --autoreset-to-one-mapper
```
在上面的命令中,我将 `--check-column` 参数的值设置为 `id`,并将 `--split-by` 参数的值也设置为 `id`,同时使用 `--autoreset-to-one-mapper` 参数将并行度设置为 1,以避免拆分数据。