Hadoop 在导入之前,是否可以在新文件上编写带有过滤器的Sqoop增量导入?
我的疑问是,比如说,我在sql server表上有一个包含2000条记录的A1.csv文件,我将这些数据导入hdfs,当天晚些时候我在sql server表的同一个文件中添加了3000条记录。 现在,我想为要添加到hdfs上的第二块数据运行增量导入,但是,我不想导入完整的3000条记录。根据导入的必要性,我只需要一些数据,例如,作为增量导入的一部分导入1000条具有特定条件的记录 有没有一种方法可以使用sqoop增量导入命令来实现这一点Hadoop 在导入之前,是否可以在新文件上编写带有过滤器的Sqoop增量导入?,hadoop,merge,hdfs,sqoop,Hadoop,Merge,Hdfs,Sqoop,我的疑问是,比如说,我在sql server表上有一个包含2000条记录的A1.csv文件,我将这些数据导入hdfs,当天晚些时候我在sql server表的同一个文件中添加了3000条记录。 现在,我想为要添加到hdfs上的第二块数据运行增量导入,但是,我不想导入完整的3000条记录。根据导入的必要性,我只需要一些数据,例如,作为增量导入的一部分导入1000条具有特定条件的记录 有没有一种方法可以使用sqoop增量导入命令来实现这一点 请帮助,谢谢。您需要一个唯一的键或时间戳字段来标识增量,它
请帮助,谢谢。您需要一个唯一的键或时间戳字段来标识增量,它是您案例中新的1000条记录。使用该字段,您必须选择将数据引入Hadoop的选项
选项1 是使用sqoop增量追加,下面是它的示例
sqoop import \
--connect jdbc:oracle:thin:@enkx3-scan:1521:dbm2 \
--username wzhou \
--password wzhou \
--table STUDENT \
--incremental append \
--check-column student_id \
-m 4 \
--split-by major
论据:
--check-column (col) #Specifies the column to be examined when determining which rows to import.
--incremental (mode) #Specifies how Sqoop determines which rows are new. Legal values for mode include append and lastmodified.
--last-value (value) Specifies the maximum value of the check column from the previous import.
选项2 在sqoop中使用
--query
参数,您可以使用原生sql for mysql/连接到的任何数据库
例如:
sqoop import \
--query 'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE $CONDITIONS' \
--split-by a.id --target-dir /user/foo/joinresults
sqoop import \
--query 'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE $CONDITIONS' \
-m 1 --target-dir /user/foo/joinresults
因此,使用查询(选项2),我们可以选择是需要全部3000条记录,还是只需要从中选择1000条?您可以将查询更改为需要的方式,1000行或2000行。。如果需要所有记录,只需选择*而无需任何条件。