据我所知,Sqoop提供了几个方法来处理增加的进口的Apache Sqoop增量导入
追加模式
上次更改模式
上追加模式问题:
附加模式是否仅支持整数数据类型的检查列?如果我想使用日期或时间戳列,但仍然只想追加到HDFS中已有的数据,该怎么办?
这种模式是否意味着新数据会附加到现有的HDFS文件,或者它只从源数据库中选择新数据还是两者都选?
可以说检查列是源表中的id列。在ID列为100的表中已经存在一行。当sqoop导入以最后值为50的附加模式运行时。现在它导入ID> 50的所有行。当再次使用last-值为150,但是这次id值为100的行已更新为200.此行是否也会被拉?
例如:假设有一个表名为customers,其中一条记录如下。第一列是id。
100 ABC XYZ 5000
当Sqoop作业在追加方式和最后一值运行50 ID列,那么它会拉上面的记录。
现在同样的记录被改变,ID也被改变(假设的例子虽然)如下
200 ABC XYZ 6000
如果再次运行sqoop命令,将这个拉上面的记录,以及是个问题。
问题上上次更改模式:
貌似运行sqoop这种模式将合并使用2个MR内部工作新数据的现有数据。 sqoop用来比较合并过程中的旧和新的列是什么?
用户可以指定合并过程的列吗?
是否可以提供必须用于合并过程的多个列?
对于合并过程是否存在target-dir,以便sqoop将现有目标目录视为旧数据集?否则,Sqoop将如何合并旧数据集?
对于追加模式下的Q3,我更新了原始问题。我认为答案还没有。 – learninghuman
我从apache sqoop cookbook中看到这样一条语句:“在内部,上次修改后的增量导入包含两个独立的MapReduce作业,第一个作业将导入类似于正常导入的已更改数据的增量,此导入作业将数据保存在临时目录下的第二个作业将同时采用旧数据和新数据,并将它们合并到最终输出中,只保留每行的最后更新值。“ – learninghuman
找出增量最后修改模式,提供的merge-key与目标目录相同将导致2个MR作业,并且基目录是合并输出。虽然历史丢失了。 – learninghuman