提取CSV中第一行的部分内容并创建列

aurhwmvo  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(177)

以下情况:

  • 我有一个.csv文件作为输入
  • .csv是从工具导出的
  • 导出将在row 1,column 1中生成一个“Metadata”条目
  • 数据的行标题在row 2中
  • 数据从第3行开始

“元数据”具有以下架构:

  • 字符串1-字符串2-INT 1/INT 2/INT 3/字符串3-字符串4-字符串5(字符串6)字符串7 *

样品:
| A级|B| C语言|D级|E级|F级|G级|高|一个|J型|K值|左|
| - -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|
| “中继数据”||||||||||||
| 标题1|标题2|标题3|标题4|标题5|标题6|标题7|标题8|标题9|标题10|标题11|标题12|
| “数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|
| “数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|
我的目标:
创建数据流:

  • 提取“元数据”,用分隔符“/"、“-“、“(“和“)”将其拆分,并使每个部分在派生列和接收器文件名中可用
  • 创建三个新列,列标题基于“String 3”、“String 6”和“String 7”
  • 基于“元数据”创建动态接收器文件名:* “字符串6”.“字符串7”_“字符串3”.csv*

因此,在最后有一个表,其中列标题来自第2行,数据从第3行开始,三个新列基于“元数据”的部分,以及一个动态文件名基于“元数据”的部分:

  • 字符串6.字符串7_字符串3.csv *:

| 标题1|标题2|标题3|标题4|标题5|标题6|标题7|标题8|标题9|标题10|标题11|标题12|“附加列1”|“附加列2”|“其他数据行3”|
| - -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|
| “数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“字串3”|“字串6”|“字符串”|
| “数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“数据类型”|“字串3”|“字串6”|“字符串”|

olhwl3o2

olhwl3o21#

更新

我做了一个测试,它也能解决问题。
这是我的数据源:

我的测试的调试结果如下,它将生成一个csv文件:

1.数据源为csv文件,请不要选择第一行作为标题.

第一行作为表头设置为假:

1.然后,在SurrogateKey1活动中,按如下方式设置值:


指令集
它将添加一个row_no列,以数字加1的形式表示:

1.然后我使用ConditionalSplit1活动将源数据拆分为3种类型的数据流:第一个月
1.在Select1活动中,我只选择_col0_,并将其命名为column0

数据预览如下所示:

指令集
1.然后,我使用DerivedColumn1活动创建3个新列:

ADDITIONALCOLUMN1 => split(split({_col0_},'-')[3],'/')[4]
ADDITIONALCOLUMN2 => split(split(split({_col0_},'-')[5],'(')[2],')')[1]
ADDITIONALCOLUMN3 => split(split(split({_col0_},'-')[5],'(')[2],')')[2]


数据预览如下:

文件
1.在Select2活动中,我只选择了3个新列。

3个新列的数据预览如下所示:

1.在DerivedColumn2活动中,我创建了FileName列:concat(ADDITIONALCOLUMN2,'.',ADDITIONALCOLUMN3,'_',ADDITIONALCOLUMN1,'.csv')

数据预览如下:

1.在Join2活动中,我使用了Cutomer(cross),并且Right流是DerivedColumn1,因此我们可以将在DerivedColumn2活动中生成的数据添加到尾部。

数据预览如下所示:

1.在DerivedColumn3活动中,我手动创建了3列(由于接下来将执行Union活动,因此列数必须相同)。
数据预览如下:

1.在Select6活动中,我们可以选择所需的列。
设置如下:

数据预览如下:x1c20日1x
1.然后我们跳转到Join1活动,设置如下:

数据预览如下所示,我们可以看到**Custom(cross)**将在尾部添加我们在DerivedColumn2活动中生成的数据:

指令
1.在Select4活动中,我选择了所有列:

数据预览如下:

13.然后我们跳到Union1活动:

数据预览如下:

指令
1.在Select5活动中(此步骤可以省略,直接跳到sink1活动),我选择了所有列。我们可以跳过此步骤。

1.在sink1 activity.设置如下,它将生成一个具有此名称的csv文件:

数据预览如下:

指令集
就这样了

相关问题