如何在NiFi的flowfile中映射列明智的数据?
我有具有以下结构的CSV文件。,如何在NiFi的flowfile中映射列明智的数据?
Alfreds,Centro,Ernst,Island,Bacchus
Germany,Mexico,Austria,UK,Canada
01,02,03,04,05
现在我有该数据移动到数据库等的下方。
Name,City,ID
Alfreds,Germay,01
Centro,Mexico,02
Ernst,Austria,03
Island,UK,04
Bacchus,Canda,05
我试图映射那些colums,但我无法在列明智中提取数据。在列
这里我输入数据明智的,但我需要插入SQLServer的那些行明智
任何人都可以建议的方式来逐列数据传输到列在SQL Server明智?
谢谢
@Andy,
它可以在NiFi可能还没有使用ExecuteScript。
我已经提取了3个输入行作为input.1,input.2,input.3在ExtractText中。然后使用expression language中的AnydelinateValues计算“input.1”中的列数,并将其存储在“TotalCount”属性中。
最初做成“Count = 1”。
使用循环概念,通过使用“计数”,然后递增,以获得第一列“计数”检查“计数”在RouteOnAttribute “乐(TOTALCOUNT)”
现在形成插入查询“计数”属性。
它对我很好,它可能对某人有用。
没有现有的Apache NiFi处理器来执行列转置。其中一个问题是,由于大多数NiFi组件都是设计的,所以这很难以流式传输的方式进行,因为在天真的实现中,您需要将流文件的全部内容同时保存在活动内存中。
我会推荐使用ExecuteScript
处理器来做到这一点(here's a 6 line Python example)。要小心这样做,因为如果设置不正确,你可能会很容易溢出堆,或者意外地将大文件读入内存。
你可以写,其通过遍历每个Ñ行和读可达您的分隔符,存储每行字节计数器,所述Ñ元件组合为单个输出行执行流转置操作一定制的处理器,并从每行的相应字节计数器开始重复该过程。 (给定m列,这是O(m * n)
)。
另一种解决方案将被分割CSV输入到使用SplitText
处理器单独的行,使用ExecuteScript
或定制的处理器移调单行成一个单一的柱,然后使用自定义合并操作(延伸现有MergeContent
处理器或写一个脚本来做到这一点),它将输入列横向连接成一个重构矩阵。 (O(n) + O(n) + O(m)
=>O(2n + m)
,但个别转置操作可以并行执行,因此x线程它的O(n + n/x + m)
)。
任何这些方法都需要一定程度的自定义开发。如果您真的很犹豫,可以尝试使用ExecuteStreamCommand
和many bash
solutions之一在命令行上进行转置。
这将不能很好地扩展并将流文件的全部内容加载到堆空间 - 具有数千行的流文件可能会溢出堆。 – Andy
是的,它占用堆空间。对于大规模的这些方法不适用它会影响堆内存。 –