Sqoop 导入多个表但不是全部

Posted

技术标签:

【中文标题】Sqoop 导入多个表但不是全部【英文标题】:Sqoop import multiple tables but not all 【发布时间】:2016-04-07 19:17:17 【问题描述】:

我发现的所有搜索都显示了如何导入一个表或推荐 import-all-tables。如果我想从我的数据库中获取 440 个表中的 35 个怎么办?我可以只编写一个命令并用逗号分隔表格,还是必须将其放入脚本中并一遍又一遍地复制和传递命令并每次更改表格名称?

我想做什么:

echo "Sqoop Import"
--options-file $path 
--table tbl1,tbl2,tbl3\
--target-dir $path
--m 1\  

我担心我可能不得不做的事情:

echo "Sqoop Import"
--options-file $path 
--table tbl1\
--target-dir $path
--m 1

wait 

echo "Sqoop Import"
--options-file $path 
--table tbl2\
--target-dir $path
--m 1

【问题讨论】:

这将对您有所帮助:***.com/questions/34966626/… @vinayak 这正是我想要的! 好。希望它解决了问题。请给我的答案投票。 @vinayak_narune 你能发布一些解释链接的文字,我会接受它作为答案。根据我留下的评论,hrobertv 的答案并不是最好的。 【参考方案1】:

显然,sqoop 开发人员的想法和您一样。 :)

您可以使用 import-all-tables。 然后添加 --exclude-tables 逗号分隔的要从导入过程中排除的表列表。

https://sqoop.apache.org/docs/1.4.0-incubating/SqoopUserGuide.html#id1766722

【讨论】:

也可以使用-m 1. 猜表没有PK。 我看到并遇到的唯一问题是 import-all-tables 是您无法指定架构。它想要引入所有模式及其表。至少我不知道指定模式的方法。所以我只能做你最初试图避免的事情。我必须把它们列出来。 还有你提供的答案,这仍然是劳动密集型的,因为我必须指定我想排除的 405 个表......如果有一个像 --include 这样的选项会很好-tables 然后列出您要包含的表...【参考方案2】:

使用--exclude-tables "table1,table2" 选项忽略table1 和table2。

在表名之间添加空格(又名。"table1, table2"

【讨论】:

【参考方案3】:

您也可以使用 apply 相同的命令来导入 Hive:

sqoop import-all-tables \
--connect jdbc:mysql://your_ip_address:3306/database_name \
--driver com.mysql.jdbc.Driver \
--username root \
--warehouse-dir temp_dir_for_staging \
--hive-import \
--hive-overwrite \
--hive-database hive_db \
--exclude-tables list_of_tables_to_be_excluded \
-m 1

记住在 Hive 中你需要暂存区。

【讨论】:

【参考方案4】:
sqoop import-all-tables \
--connect jdbc:mysql://localhost/sqoop \
--username root \
--password hadoop \
--warehouse-dir /Sqoop21/AllTables \
--exclude-tables table1,tables2

【讨论】:

当使用sqoop-import 命令导入多个表时,使用--warehouse-dir 而不是--target-dir 不是一种好习惯/强制吗?

以上是关于Sqoop 导入多个表但不是全部的主要内容,如果未能解决你的问题,请参考以下文章

sqoop 从 db2 特定模式导入全部到 hive

Sqoop hive导出到mysql[转]

如何使用 Sqoop 从 RDBMS 将数据导入本地文件系统,而不是 HDFS?

sqoop应用

使用 sqoop 将表从 RDBMS 导入 HIVE 后约束是不是仍然存在?

sqoop导入增量数据