代码之家  ›  专栏  ›  技术社区  ›  RMD

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

  •  0
  • RMD  · 技术社区  · 5 年前

    我有一个Azure Data Factory v2管道,它正在从Cosmos数据库收集数据。此集合有一个数组属性。

    我希望至少能够将整个属性的值转储到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。

    0 回复  |  直到 5 年前
        1
  •  0
  •   DraganB    5 年前

    请查收 this 关于MongoDB和Azure SQL之间模式映射示例的文档。基本上你应该定义你的 收藏参考 这将遍历嵌套的对象数组并交叉应用。

        2
  •  0
  •   RMD    5 年前

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

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

    然后,我将这个数据集转储到SQL中的一个表中,然后在SQLAzure本身中进行其他工作。您还可以使用新的连接管道任务在到达目标之前在内存中执行此操作。