Sqoop import - 源表架构更改

时间:2016-01-04 22:58:12

标签: hadoop import sqoop

让我们说在任何关系数据库中都有一个名为T1的表,其中包含100多列。我sqoop将此表导入HDFS为CSV。

现在又有10个列添加到表T1中。如果我将这些数据导入HDFS,新数据将比以前多10列。

问题:

  1. sqoop如何对要导入的列进行排序,以便旧数据和新数据(至少对于T1中的更改​​前​​的列)位于正确的位置?

  2. 对于新列,最终是否会导入这些列?

  3. 如果列被删除怎么办?如何处理这种情况,即旧数据和新数据如何保留这些位置?

1 个答案:

答案 0 :(得分:2)

  

sqoop如何对要导入的列进行排序,以便旧数据和新数据(至少对于T1中的更改​​前​​的列)位于正确的位置?

在将数据写入HDFS时,所有基于Hadoop的工具都不会强制执行架构。默认情况下,它不会尝试使用新字段更新旧数据。 Sqoop不知道HDFS中的数据列。对于新数据,这完全取决于您如何编写sqoop import命令。如果使用带有--table子句的--columns子句,则数据将按照源上的顺序进行。如果您发出--query子句以提供自定义查询来获取数据,则顺序将基于查询中select子句的列顺序。如果您不希望在sqoop导入中明确提及列名,可以考虑在源数据库上创建视图。

  

使用新列,这些列是否总是最终导入?

不一定像我之前解释的那样

  

如果列被删除怎么办?如何处理这种情况,即旧数据和新数据如何保留这些位置?

如果删除了列,则很可能必须根据某些规则重新加载数据或在处理时处理它。更好的方法是重新加载数据或在源数据库上创建视图。

这些不是sqoop自身的限制,它们是标准问题,无论您使用何种技术,都需要自定义解决方案。问题过于笼统,因此获取API可能不太可行。