我有一个需要加载数据并存储到 hdfs
使用 Pig
,此结果(清管器输出/部件文件数据)应加载到中的两个表中 mysql
使用 Sqoop
.
这可以由sqoop完成吗?任何其他解决方案。
例如,如果我有这样一个文件
col1 col2 col3 col4
.... .... .... ....
.... .... .... ....
.... .... .... ....
I want to export col1,col2 to table table1 and col3,col4 to table table 2 of some database
提前谢谢。
2条答案
按热度按时间ecr0jaav1#
我在下面的解决方案中使用mysql,但是其他数据库也应该使用同样的方法。
在hdfs上创建以下平面文件:
在mysql中创建两个表:
然后创建一个存储过程,该过程接受四个输入值,然后将前两个值插入第一个表,最后两个值插入第二个表:
现在使用sqoop export,但不指定表名,而是使用--call选项调用上面创建的存储过程:
导出过程成功完成:
现在验证这两个表是否有我们要查找的数据:
所以使用存储过程,hdfs上的一个平面文件可以导出到数据库上的多个表中。
如果您不想使用存储过程,那么另一种方法是使用pig在hdfs上创建两个平面文件—一个有col1,col2,另一个有col3,col4。然后,您可以对每个平面文件分别执行两个sqoop导出,将其导出到数据库中相应的表中。
sqoop export features--columns选项,但这仅在数据库端相对于hdfs上的平面文件有更多列时才有用。另一方面,似乎需要存储过程。根据sqoop-749,在sqoop版本1.4.3和更高版本中,可以在不指定表的情况下调用存储过程。我在上面的例子中使用了hadoop2.0.0和sqoop1.4.3。
hlswsv352#
容易的!只需使用pig将数据拆分为两个关系:
然后运行sqoop导出两次,每个关系一次。