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

Extracting array properties from Cosmos DB documents using Azure Data Factory

我有一个 Azure 数据工厂 v2 管道,它从 Cosmos DB 集合中提取数据。此集合有一个 属性 数组。

我至少希望能够将整个 属性 的值转储到 SQL Azure 中的一个列中。我不需要对其进行解析(尽管这也很好),但 ADF 在数据集定义中将此列列为 "Unsupported Type",并将其列在排除列部分中。

这是我正在使用的 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。

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

可能有更好的方法来解决这个问题,但我最终创建了第二个副本 activity,它使用针对 Cosmos 的查询而不是基于集合的捕获。查询像这样展平数组:

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

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