从REST到表存储的数据工厂数据复制-PartitionKey null [对象/数组]

时间:2019-01-13 10:35:03

标签: json azure azure-table-storage azure-data-factory

美好的一天,

我们正在通过Data Factory v2中的COPY DATA(“还原到表存储”)导入以下JSON格式:

[  
   {  
      "ERROR":false,
      "USERNAME":"DUMMY"
   },
   [  
      {  
         "A":1,
         "B":2,
         "C":3
      },
      {  
         "A":1,
         "B":0,
         "C":3
      }
   ]
]

分区键值:USE SOURCE COLUMN

分区键列:C

A B and C正确设置了映射。 ERROR和USERNAME是-不包括-。

在调试中给出以下错误:

  

“ errorCode”:“ 2200”,“ message”:“在'接收器'侧发生故障。   ErrorCode = UserErrorAzureTableKeyColumnWithNullValue,'Type = Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message =列   'C'包含'NULL'值,因此不能用作'PartitionKey'   Azure表。

我了解为什么会发生错误,COPY DATA工具尝试创建三行:

1。第一行基于ERROR和USERNAME。该行的C值的确为空

2。第二行基于A,B和C。该行正确,因为C没有空值。

3。第三行基于A,B和C。该行正确,因为C没有空值。

启用了容错功能:跳过不兼容的行,但不能解决问题。

我们在上面知道,因为它可以使用默认的分区键值:

Screenshot two rows

我们无法更改输入格式。我们可以在Data Factory中做什么来解决此问题?如何使用ERROR和USER忽略第一个对象,或者如果它为null,如何使用分区键跳过行?

这可以用“动态内容”代码处理吗?

1 个答案:

答案 0 :(得分:0)

辛巴达。根据我的测试,没有直接方法可以跳过REST-TableStorage复制活动中的特定行。

我的想法是,您可以先使用Azure Function activity处理其余的api数据。

请参考以下步骤:

1。在Azure Funtion中创建Http Trigger,访问您的rest api并获取数据。

2。在该Azure函数中,循环数据并删除“ ERROR""USERNAME"行以返回仅包含"A" "B" "C"的数组。

3。在Azure数据工厂中使用Azure Function活动执行该功能,然后使用复制活动进行链接。

enter image description here

不再有不兼容的行。