使用Azure数据工厂从Cosmos DB文档中提取数组属性

时间:2019-07-11 14:36:05

标签: json azure azure-cosmosdb azure-data-factory azure-data-factory-2

我有一个Azure Data Factory v2管道,该管道从Cosmos DB集合中提取数据。此集合的属性是数组。

我至少希望能够将整个属性的值转储到SQL Azure中的列中。我不需要解析它(尽管那也很好),但是ADF在数据集定义中将此列列为“不受支持的类型”,并在“排除的列”部分列出了它。

这是我正在使用的JSON的示例。我想要的属性是“ MyArrayProperty”:

{
    "id": "c4e2012e-af82-4c48-8960-11e0436e6d3f",
    "Created": "2019-06-14T16:04:13.9572567Z",
    "Updated": "2019-06-14T16:04:14.1920988Z",
    "IsActive": true,
    "MyArrayProperty": [
                {
                    "SomeId": "a4427015-ca69-4958-90d3-0918fd5dcac1",
                    "SomeName": "BlahBlah"
                }
            ]
    }
}

我尝试手动在ADF数据源(例如“ MyArrayProperty”)中指定一列,并使用字符串数据类型,但是该值始终为null。

2 个答案:

答案 0 :(得分:0)

请查看this article文档,以了解MongoDB和Azure SQL之间的架构映射示例。基本上,您应该定义您的 collectionReference ,它将遍历嵌套的对象数组并交叉应用。

答案 1 :(得分:0)

也许有更好的方法来解决此问题,但是我最终创建了第二个复制活动,该活动使用针对Cosmos的查询而不是基于集合的捕获。查询使数组变平,如下所示:

SELECT m.id, c.SomeId, c.SomeName
FROM myCollection m join c in m.MyArrayProperty

然后,我获取了该数据集并将其转储到SQL中的表中,然后在SQL Azure本身中完成了其他工作。您还可以使用新的Join管道任务在到达目的地之前在内存中执行此操作。