3

我有一个关于 Kylo 和 Nifi 的问题。使用的 Kylo 版本是0.10.1 使用的 Nifi 版本是1.6.0

当我们为数据库摄取创建提要(使用数据库作为源)时,在 Additional Options 步骤中没有规定输入源表列名称。

但是,在 Nifi 方面,我们使用 Import Sqoop 处理器,它有一个名为Source Fields的必填字段,它要求输入列,用逗号分隔。如果没有完成,我们会得到一个错误:

错误工具。导入工具:导入失败:我们发现没有列名的列。如果使用自由格式查询导入,请验证您是否在查询中输入了所有列名(如果您使用列转换,请考虑添加子句 AS)

对于我们的要求,我们希望 Import Sqoop 将表中的所有列自动获取到此属性中,而无需在 Nifi 级别进行手动干预。是否有任何选项可以自动在后台包含数据库表的所有列?或者是否有任何其他可能性在 UpdateAttribute 处理器中给出这个值?

4

2 回答 2

0

是的,Teradata Kylo Import Sqoop不是标准的 NiFi 处理器,但它可供我们使用。深入查看处理器的属性,我们可以看到确实需要 SOURCE_TABLE_FIELDS 。然后,您可以选择手动硬编码列列表或设置动态生成列表的方法。

典型的解决方案是通过查询表的元数据来提供字段列表。特定的解决方案取决于源表和目标表的设置位置以及源列和目标列之间的映射是如何定义的。例如,可以使用数据库的 INFORMATION_SCHEMA 表并按名称匹配列。因为 SQOOP 的输出应该与源匹配,所以必须找到一种方法来生成列列表并将其提供给 ImportSqoop 处理器。更好的方法可能涉及单独的元数据,该元数据将存储源和目标信息以及映射和可能的转换(许多工具可用于此目的,例如 Wherescape)。

更具体地说,我将使用LookupAttribute与数据库或脚本查找服务配对,以从某些元数据提供程序中检索列列表。

于 2021-12-29T18:31:17.023 回答
0

正如评论中提到的,ImportSqoop 不是一个普通的 Nifi 处理器。这不一定是问题,但意味着在不涉及创建者的情况下可能无法解决问题。

此外,虽然我仍在争论 Sqoop 上的 Nifi 是否是反模式,但肯定没有必要。请先查看标准选项:

  1. 从表中获取数据到 Nifi 的标准方法是使用标准处理器,例如 ExecuteSQL
  2. 如果这还不够,使用 Sqoop(批处理工具)的标准方法是使用批处理调度程序,例如 Oozie 或 Airflow

该线程可能会消除对第 1 点的进一步怀疑:http: //apache-nifi.1125220.n5.nabble.com/Sqoop-Support-in-NIFI-td5653.html

于 2020-07-02T19:50:13.253 回答