Sqoop 导入 - 源 table 架构更改
Sqoop import - Source table schema change
假设在任何关系数据库中都有一个名为 T1 的 table,它有 100 多列。我 sqoop 将此 table 作为 CSV 导入 HDFS。
现在 table T1 中又添加了 10 列。如果我将此数据导入 HDFS,新数据将比以前多 10 列。
问题:
sqoop如何对导入的列进行排序,以便新旧数据(至少对于T1中更改之前的列)处于正确的位置?
对于新列,这些列是否总是在最后导入?
如果列被删除了怎么办?如何处理这种情况,即旧数据和新数据如何保留位置?
How does sqoop order the columns being imported, so that the old and the new data (at least for the columns before the change in T1) are at the right positions?
所有基于 Hadoop 的工具在将数据写入 HDFS 时都不强制执行模式。默认情况下,它不会尝试用新字段更新旧数据。 Sqoop 不知道 HDFS 中数据的列。对于新数据,这完全取决于您如何编写 sqoop import 命令。如果您使用 --table
子句而不使用 --columns
子句,则数据将按照源上的顺序排列。如果您发出 --query
子句以提供自定义查询来获取数据,则顺序将基于查询中 select 子句的列顺序。如果您不想在 sqoop 导入时明确提及列名,您可以考虑在源数据库上创建视图。
With new columns, do these columns always get imported at the end?
不一定像我之前解释的那样
What if a column gets deleted? How to handle this situation i.e. how does the old data and the new data retain the positions?
如果列被删除,很可能您必须重新加载数据或在处理时根据某些规则进行处理。更好的方法是重新加载数据或在源数据库上创建视图。
这些不是 sqoop 本身的限制,它们是标准问题,无论您使用何种技术,都需要自定义解决方案。问题太笼统,因此获得 API 可能不可行。
假设在任何关系数据库中都有一个名为 T1 的 table,它有 100 多列。我 sqoop 将此 table 作为 CSV 导入 HDFS。
现在 table T1 中又添加了 10 列。如果我将此数据导入 HDFS,新数据将比以前多 10 列。
问题:
sqoop如何对导入的列进行排序,以便新旧数据(至少对于T1中更改之前的列)处于正确的位置?
对于新列,这些列是否总是在最后导入?
如果列被删除了怎么办?如何处理这种情况,即旧数据和新数据如何保留位置?
How does sqoop order the columns being imported, so that the old and the new data (at least for the columns before the change in T1) are at the right positions?
所有基于 Hadoop 的工具在将数据写入 HDFS 时都不强制执行模式。默认情况下,它不会尝试用新字段更新旧数据。 Sqoop 不知道 HDFS 中数据的列。对于新数据,这完全取决于您如何编写 sqoop import 命令。如果您使用 --table
子句而不使用 --columns
子句,则数据将按照源上的顺序排列。如果您发出 --query
子句以提供自定义查询来获取数据,则顺序将基于查询中 select 子句的列顺序。如果您不想在 sqoop 导入时明确提及列名,您可以考虑在源数据库上创建视图。
With new columns, do these columns always get imported at the end?
不一定像我之前解释的那样
What if a column gets deleted? How to handle this situation i.e. how does the old data and the new data retain the positions?
如果列被删除,很可能您必须重新加载数据或在处理时根据某些规则进行处理。更好的方法是重新加载数据或在源数据库上创建视图。
这些不是 sqoop 本身的限制,它们是标准问题,无论您使用何种技术,都需要自定义解决方案。问题太笼统,因此获得 API 可能不可行。