问题:对包含连接的表执行增量 Sqoop?

我有一些非常大的表,我试图将它们从源系统数据仓库中 sqoop 到 HDFS,但这样做的带宽有限。我只想拉出我需要的列,并尽量减少让桌子站起来的运行时间。

sqoop 当前拉取如下内容:

SELECT
    ColumnA,
    ColumnB,
    ....
    ColumnN
FROM
    TABLE_A
LEFT JOIN
    TABLE_B
ON
     ...
LEFT JOIN
    TABLE_N
....

考虑到数据以星型模式格式存储,并且维度可以独立于事实更新,是否可以执行增量 sqoop?

或者,对于我需要的列,增量地对整个表进行 sqoop 并在 HDFS 端执行连接是唯一的解决方案吗?

解答

对于增量导入,您需要使用 --incremental 标志。请参阅以下链接以获取更多信息:-

https://sqoop.apache.org/docs/1.4.2/SqoopUserGuide.html#_incremental_imports

您需要指定--incremental 告诉sqoop 您想要增量加载--check-column 指定用于增量sqooping 的列和--last-value 来说明您希望从哪个值开始sqooping 下一次加载。这只是图片的一半。有更多方法可以做到这一点。例如。您可以使用 --query 选项,您的查询就像 Select * from table where column > 123 一样。这基本上是一回事。您需要记录所选列的最后/最大值并将其用于下一次导入。

Logo

华为、百度、京东云现已入驻,来创建你的专属开发者社区吧!

更多推荐