是否可以在导入之前在新文件上编写带有过滤器的 Sqoop 增量导入?
Is it possible to write a Sqoop incremental import with filters on the new file before importing?
我的疑问是,比如说,我在 sql-服务器 table 上有一个包含 2000 条记录的文件 A1.csv,我将这些数据导入到 hdfs,当天晚些时候我添加了sql-服务器 table 上的同一个文件有 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
参数,您可以在其中为连接到的 mysql/any 数据库使用本机 sql。
示例:
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
我的疑问是,比如说,我在 sql-服务器 table 上有一个包含 2000 条记录的文件 A1.csv,我将这些数据导入到 hdfs,当天晚些时候我添加了sql-服务器 table 上的同一个文件有 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
参数,您可以在其中为连接到的 mysql/any 数据库使用本机 sql。
示例:
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