Sqoop 能否用于对 IMPORT 执行连接?

Can Sqoop be used to perform joins on the IMPORT?

我最近被问到这个问题,我在描述一个用例时涉及多个连接以及我在 Spark 中实现的一些处理,问题是,在将数据导入到HDFS 使用 Sqoop?我想从架构的角度了解是否建议在 Sqoop 中实现连接,即使可能也是如此。

这取决于您的数据管道的基础结构,如果您将 Spark 用于其他目的,那么最好也使用相同的 Spark 来导入数据。 Sqoop 支持 join,如果你只需要导入数据就足够了。希望这能回答您的问题。

可以在 sqoop 导入中进行连接。

从架构的角度来看,这取决于您的用例,sqoop 主要是一个用于快速 imports/exports 的实用程序。所有的etl都可以通过spark/pig/hive/impala.

完成

虽然它是可行的,但我建议不要这样做,因为它会提高您的工作时间效率,而且会给您的计算源带来负载joins/aggregations,而且 sqoop 主要设计为一种摄取结构化来源工具。

您可以使用:

  • DBMS 中的一个视图,其中可以选择使用 sqoop eval 读取以在 DB 中设置参数。
  • freeform SQL for sqoop where JOIN defined

但是,带有 JOIN 的视图不能用于增量导入。

The facility of using free-form query in the current version of Sqoop is limited to simple queries where there are no ambiguous projections and no OR conditions in the WHERE clause. Use of complex queries such as queries that have sub-queries or joins leading to ambiguous projections can lead to unexpected results.

Sqoop导入工具支持join。它可以使用 --query 选项进行存档(不要将此选项与 --table / --column 一起使用)。