将具有 Azure 数据工厂的特殊结构的 CSV 文件合并到 PostgreSQL

问题描述 投票:0回答:1
我在 Azure 存储资源管理器上有一个来自 API 请求的 csv 文件。我想在 Azure 数据工厂上构建一个管道,将此文件作为表接收到 PostgreSQL。我的问题是 csv 文件的格式无法轻松转换。

第一行(单元格)以行号开头:


0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24


接下来是下一行的实际数据:

{'AccountID': '123456', 'CarrierID': '12-34-56', 'CarrierName': None, 'ControlID': None, 'ModifiedDate': '/Date(1401779596170-0400)/', 'OrderDate': '/Date(1401741929547-0400)/', 'OrderNumber': None, 'ShipToAddress': {'Address1': 'Road 4', 'Address2': None, 'Address3': None, 'Attention': ',', 'City': 'NY', 'ContactName': 'Johnson, John', 'Country': 'USA', 'EmailAddress': '[email protected]', 'PhoneNumber': '12345678', 'PostalCode': 'test', 'State': 'NJ'}, 'Status': 'Cancelled', 'Column1': 'test-abcd', 'Column2': 'test-abcd', 'Column3': 'test-abcd', 'Column4': 'hello test', 'Column5': ['1234-abcd'], 'Column6': 'test-abcd', 'ColumnNumber': '54321'},


用逗号分隔,一个新的“系列”以完全相同的列开始。

{'AccountID': '123457', 'CarrierID': '12-34-57', 'CarrierName': None, 'ControlID': None, ..........


正如我们所见,ShipToAddress 列在 accolades {} 之间有多个列。此外,还有一个名为 Column5 的列,其数据位于括号之间:['1234-abcd']。

我的问题是如何将 ADF 中的它转换为一个简单的表(包含 AccountId、CarrierId、CarrierName 等列),以便可以将其下沉到 PostgreSQL?

ShipToAddress 列可以留空,但 Address1、Address2 等都应该是单独的列。最好将第 5 列中的括号去掉。

json csv azure-data-factory
1个回答
0
投票
我确实同意@

Bhavani,首先您需要将数据转换为正确的 JSON 文件。然后,您可以使用 ADF Dataflow 转换为您想要的格式并复制到目标表中。

首先使用您的 csv 文件创建一个分隔文本数据集并给出以下配置。

enter image description here

现在,使用以下设置对此数据集使用查找活动。

enter image description here

然后,使用具有以下表达式的数组集变量活动。

@json(replace(replace(replace(replace(string(activity('Lookup1').output.value),'"},{"Prop_0":"',','),'}"}]','}]'),'{"Prop_0":"',''),'None','null'))

enter image description here

设置的变量活动将给出所需的 JSON 数组。

enter image description here

现在,使用复制活动将此 JSON 数组复制到 JSON 文件中。您可以按照此

SO答案中的流程来执行此操作。

JSON 文件将如下创建。

enter image description here

创建所需的 JSON 后,创建一个 JSON 数据集并将其用作数据流中的源,并将 Postgres 表用作其中的接收器以实现您的要求。

© www.soinside.com 2019 - 2024. All rights reserved.