SQOOP支持直接从Hive表到RDBMS表的导出操作,也支持HDFS到RDBMS表的操作,
当前需求是从Hive中导出数据到RDBMS,有如下两种方案:
Ø 从Hive表到RDBMS表的直接导出:
该种方式效率较高,但是此时相当于直接在Hive表与RDBMS表的数据之间做全量、增量和更新对比,当Hive表记录较大时,或者RDBMS有多个分区表时,无法做精细的控制,因此暂时不考虑该方案。
Ø 从HDFS到RDBMS表的导出:
该方式下需要先将数据从Hive表导出到HDFS,再从HDFS将数据导入到RDBMS。虽然比直接导出多了一步操作,但是可以实现对数据的更精准的操作,特别是在从Hive表导出到HDFS时,可以进一步对数据进行字段筛选、字段加工、数据过滤操作,从而使得HDFS上的数据更“接近”或等于将来实际要导入RDBMS表的数据。在从HDFS导入RDBMS时,也是将一个“小数据集”与目标表中的数据做对比,会提高导出速度。示意图如下所示:
Ø 应用场景:将Hive表中的全部记录(可以是全部字段也可以部分字段)导出到目标表。
Ø 实现逻辑:
Ø 使用限制:目标表中不能有与Hive中相同的记录,一般只有当目标表为空表时才使用该模式进行首次数据导出。
Ø 参数:源表、目标表、导出字段(select的字段)、映射关系(–column后的参数)
Ø 适用的数据库:Oracle、DB2、SQL Server、PG、MySQL
Ø 应用场景:将Hive表中的增量记录以及有修改的记录同步到目标表中。
Ø 实现逻辑:
Ø 使用限制:update-key可以是多个字段,但这些字段的记录都应该是未被更新过的,若该参数指定的字段有更新,则对应记录的更新不会被同步到目标表中。
Ø 参数:源表、目标表、筛选字段及其取值范围、导出字段(select的字段)、映射关系(–column后的参数)、更新的参考字段(–update-key后的参数)
Ø 适用的数据库:Oracle、SQL Server、MySQL
Ø 应用场景:将Hive表中的有更新的记录同步到目标表。
Ø 使用限制:update-key可以是多个字段,但这些字段的记录都应该是未被更新过的,若该参数指定的字段有更新,则对应记录的更新不会被同步到目标表中。
Ø 参数:源表、目标表、筛选字段及其取值范围、导出字段(select的字段)、映射关系(–column后的参数)、更新的参考字段(–update-key后的参数)
Ø 适用的数据库:Oracle、DB2、SQL Server、PG、MySQL
全量导出
HQL示例:insert overwrite directory ‘/user/root/export/test’ row format delimited fields terminated by ‘,’ STORED AS textfile select F1,F2,F3 from ;
SQOOP脚本:sqoop export --connect jdbc:mysql://localhost:3306/wht --username root --password cloudera --table --fields-terminated-by ',' --columns F1,F2,F3 --export-dir /user/root/export/test
增量导出(insert模式)
HQL示例:insert overwrite directory ‘/user/root/export/test’ row format delimited fields terminated by ‘,’ STORED AS textfile select F1,F2,F3 from where ;
SQOOP脚本:sqoop export --connect jdbc:mysql://localhost:3306/wht --username root --password cloudera --table --fields-terminated-by ‘,’ --columns F1,F2,F3 --update-key F4 --update-mode allowinsert --export-dir /user/root/export/test
更新导出(update模式)
HQL示例:insert overwrite directory ‘/user/root/export/test’ row format delimited fields terminated by ‘,’ STORED AS textfile select F1,F2,F3 from where ;
SQOOP脚本:sqoop export --connect jdbc:mysql://localhost:3306/wht --username root --password cloudera --table --fields-terminated-by ‘,’ --columns F1,F2,F3 --update-key F4 --update-mode updateonly --export-dir /user/root/export/test