【问题标题】:How to set parquet column name dynamically如何动态设置镶木地板列名
【发布时间】:2023-01-09 18:09:55
【问题描述】:
我想合并多个 csv 文件
在 Azure Synapse 管道中。
我会通过复制活动来实现它,但我面临着一个问题。
有两种类型的源文件。
一个有标题(文件类型是'with header'),另一个没有标题(文件类型是'without header')。
我想使用“带标头”文件的标头设置方案。
但我不知道该怎么做。
在我看来,可以通过以下方式实现,是否可能?
- 使用“查找活动”获取“带标题”文件的列名列表。
2.将列名列表设置为数组类型的变量。
3.在'复制活动'中使用变量映射并合并多个文件。
我可以使用列名列表进行映射吗?
等待您的帮助。
任何答案将不胜感激。
谢谢你。
它被输入到问题的详细信息中。
【问题讨论】:
标签:
azure
azure-pipelines
azure-synapse
【解决方案1】:
我可以使用列名列表进行映射吗?
不,您不能在动态映射中使用列列表,您需要在 json 表单中指定映射,如下所示
{
"source": {
"name": "Id",
"type": "String",
"physicalType": "String"
},
"sink": {
"name": "Id",
"type": "String",
"physicalType": "String"
}
}
我想使用“带标头”文件的标头设置方案。但我不知道该怎么做。
首先在您的场景中,您需要隔离 with header 和 without header 等文件
在那之后,首先你需要使用不带标题的文件列表获取元数据活动。
然后使用 foreach activity 和 dataflow 将标头添加到它,并将模式添加到每个文件,现在将获取元数据的输出传递给 for-each 活动。
在此之后进行数据流活动并在文件上创建标题列之前将标题添加到文件中,例如
-
将without header文件设置为源1,不要选择第一行作为标题.
-
将header文件设置为源2,不要选择第一行作为标题.
-
在 SurrogateKey1 activity ,输入 row 作为 Key 栏和2作为起始值。
-
在 SurrogateKey2 activity ,输入 row 作为 Key 栏和1作为起始值。
-
然后我们可以联合SurrogateKey1流和SurrogateKey2流在Union1活动。
-
然后我们可以在 Sort1 活动中按 row 对这些行进行排序。
-
然后在接收器映射中删除行列并将其保存到带有标题文件夹的文件中:
执行成功:
现在有了带标题的文件,您可以合并它们。