我了解 Sqoop 提供了几种处理增量导入的方法
追加模式
最后修改模式
追加模式的问题:
仅作为整数数据类型的校验列支持追加模式吗?如果我想使用日期或时间戳列,但我仍然只想追加到 HDFS 中已经存在的数据,该怎么办?
这种模式是否意味着新数据被附加到现有的 HDFS 文件中,或者它只从源数据库中选择新数据,或者两者兼而有之?
假设检查列是源表中的 id 列。表中已经存在 id 列为 100 的行。当在 append 模式下运行 sqoop 导入时,最后一个值为 50。现在它会导入 id > 50 的所有行。再次使用 last- 运行时value 为 150,但这次 id 值为 100 的行更新为 200。这行也会被拉取吗?
示例:假设有一个名为 customers 的表,其中一条记录如下。第一列是 id。
100 abc xyz 5000
当 Sqoop 作业以附加模式运行并且 id 列的最后一个值为 50 时,它将拉取上述记录。
现在相同的记录被更改并且 id 也被更改(虽然是假设的示例),如下所示
200 abc xyz 6000
如果您再次运行 sqoop 命令,这是否会拉出上述记录也是问题。
关于 lastmodified 模式的问题:
看起来在这种模式下运行 sqoop 会在内部使用 2 个 MR 作业将现有数据与新数据合并。sqoop 在合并过程中用于比较新旧的列是什么?
用户可以指定合并过程的列吗?
是否可以提供多个必须用于合并过程的列?
是否应该存在目标目录以使合并过程发生,以便 sqoop 将现有目标目录视为旧数据集?不然Sqoop怎么会合并旧数据集呢?