0
我想将mysql中多个表的数据加载到hdfs中,表的名称像a_0_0,a_0_1,a_0_2。使用sqoop将多张表加载到hdfs中一次使用
如何cqan我使用Sqoop一次将这些表中的数据加载到hdfs中?
我可以使用UNION
吗?
我想将mysql中多个表的数据加载到hdfs中,表的名称像a_0_0,a_0_1,a_0_2。使用sqoop将多张表加载到hdfs中一次使用
如何cqan我使用Sqoop一次将这些表中的数据加载到hdfs中?
我可以使用UNION
吗?
有很多方法可以实现这一点。
,如果你要导入MySQL数据库中的所有表,你可以使用:import-all-tables - 你也可以使用此参数--exclude-tables <tables>
- 逗号分隔值 - 从impor-all-tables
排除某些表(S)如果你想导入的一些表(有意义的数据)的一些数据,你可以使用:Free-form Query Imports
如果要导入表的数量,就可以对shell脚本:
#!/bin/sh
i=0
while [ ${i} -le 5 ]
do
echo "importing table a_0_${i}"
#here write your full sqoop command, this is just an example
#sqoop import --connect --table a_0_${i}
i=$((i + 1))
done
现在运行shell脚本:sqoop命令将按逻辑运行6次并导入6个表。
$ ./importAll.sh
importing table a_0_0
importing table a_0_1
importing table a_0_2
importing table a_0_3
importing table a_0_4
importing table a_0_5
注:你必须根据你的需要来修改shell脚本逻辑。我建议的解决方案是基于所提供的详细信息。
嗨,谢谢差别很大,我认为解决方案2是合适的,因为我有20W +表分布在数百台机器,我必须考虑每个数据库的连接数。我打算使用union all来组合多个表,你知道如何实现吗? – Jiangbo
20W +表是什么意思?我认为对于使用'UNION',你将不得不考虑像mysql一样的列类型的需求,并且每个'UNION'子句中的列数都应该匹配。还要考虑'UNION'只会导出唯一的数据,您可能想使用'UNION ALL'。另外,选项2将把所有表导出到一个'hdfs'目录 –