Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在NiFi中映射flowfile中的列数据?_Sql_Sql Server_Apache Nifi - Fatal编程技术网

Sql 如何在NiFi中映射flowfile中的列数据?

Sql 如何在NiFi中映射flowfile中的列数据?,sql,sql-server,apache-nifi,Sql,Sql Server,Apache Nifi,我有以下结构的csv文件 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 我试图绘制这些柱体的地图,但无法按列方式提取数据 这里我的输入数据是按

我有以下结构的csv文件

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
我试图绘制这些柱体的地图,但无法按列方式提取数据

这里我的输入数据是按列输入的,但我需要在SQLServer中按行插入这些数据

有人能建议在sql server中将列数据转换为行数据的方法吗


谢谢

没有现有的Apache NiFi处理器来执行列转置。其中一个问题是,由于大多数NiFi组件都是以流的方式设计的,因此很难做到这一点,因为在一个幼稚的实现中,您需要同时将流文件的全部内容保存在活动内存中

我建议使用
ExecuteScript
处理器来执行此操作()。要小心这样做,因为如果堆设置不正确/将意外的大文件读入内存,很容易导致堆溢出

您可以编写一个自定义处理器来执行流式转置操作,方法是迭代n行中的每一行并读取您的分隔符,每行存储一个字节计数器,将n个元素组合为单个输出行,并从每行的相应字节计数器开始重复该过程。(给定m列,这是
O(m*n)

另一种解决方案是使用
SplitText
处理器将CSV输入拆分为单独的行,使用
ExecuteScript
或自定义处理器将单行转换为单列,然后使用自定义合并操作(可以扩展现有的
MergeContent
处理器,或者编写一个脚本来实现这一点),它将传入的列横向连接到一个重构矩阵中。(
O(n)+O(n)+O(m)
=>
O(2n+m)
但是单独的转置操作可以并行执行,因此使用x个线程它是
O(n+n/x+m)

这些方法中的任何一种都需要某种程度的定制开发。如果您真的不想继续,可以尝试使用
ExecuteStreamCommand
和其中一种方法在命令行上进行转换。

@Andy

在NiFi中也可以不使用ExecuteScript

我已经在ExtractText中将3个输入行提取为input.1、input.2、input.3,然后在“input.1”中使用AnydelinateValues计算列数,并将其存储在“TotalCount”属性中

最初设置为“计数=1”

使用循环概念通过使用“Count”获取第一列,然后在RouteOnAttribute中增加“Count”检查“Count” “总计数”

现在使用“Count”属性形成插入查询


它对我来说效果很好。它可能对某些人有用。

这不会很好地扩展,会将流文件的全部内容加载到堆空间——一个有数千行的流文件可能会溢出堆。是的,andy。它占用了堆空间。对于大范围来说,这些方法不适用,它会影响堆内存。