You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Azure Table Storage迁移数据至Cosmos DB SQL API:将扁平化嵌套对象转换为JSON嵌套结构的最优方案

如何将Azure Table的扁平化嵌套列转换为Cosmos DB的嵌套JSON结构

你遇到的这个问题其实挺常见——Azure Table存储会自动扁平化嵌套对象,而Cosmos DB更适配原生的嵌套JSON结构。好消息是,不用非得写复杂的自定义代码,Azure Data Factory(ADF)其实就能实现这个映射,可能你之前没留意到它的派生列转换功能。下面给你几个可行的方案:

方案1:用Azure Data Factory实现无代码嵌套转换

ADF的数据流可以轻松把扁平化的Address_*列重新组合成嵌套对象,步骤如下:

  • 配置Azure Table数据源:先把你的Azure Table作为ADF的数据源,确保能读取到所有扁平化列(Id、Name、Address_AddressLine1等)。
  • 添加派生列活动:在数据流里插入「派生列」转换,针对Address字段用表达式构造嵌套结构。你可以直接写JSON格式的表达式:
    {
        "AddressLine1": Address_AddressLine1,
        "AddressLine2": Address_AddressLine2,
        "City": Address_City,
        "Postcode": Address_Postcode
    }
    
    或者用ADF内置的createStruct函数更规范地生成结构:
    createStruct(
        'AddressLine1', Address_AddressLine1,
        'AddressLine2', Address_AddressLine2,
        'City', Address_City,
        'Postcode', Address_Postcode
    )
    
  • 清理多余列:添加「选择」转换,把原来的Address_*列排除,只保留Id、Name和新生成的Address列。
  • 输出到Cosmos DB:把处理后的数据流输出到你的Cosmos DB SQL API容器,选择JSON格式写入,就能得到你想要的嵌套文档了。

方案2:用Azure Function做自定义转换(灵活场景)

如果ADF的配置对你来说有点繁琐,或者需要处理空值、特殊格式这类复杂逻辑,写个简单的Azure Function是个不错的选择:

  1. 读取Table数据:用Azure Storage SDK读取Table中的实体,拿到所有扁平化属性。
  2. 手动组装嵌套对象:以C#为例,把Address_*属性提取出来组装成Address对象,再和Id、Name组合成完整的Customer:
    var customer = new Customer
    {
        Id = Guid.Parse(tableEntity["Id"].ToString()),
        Name = tableEntity["Name"].ToString(),
        Address = new Address
        {
            AddressLine1 = tableEntity["Address_AddressLine1"].ToString(),
            AddressLine2 = tableEntity["Address_AddressLine2"].ToString(),
            City = tableEntity["Address_City"].ToString(),
            Postcode = tableEntity["Address_Postcode"].ToString()
        }
    };
    
  3. 写入Cosmos DB:用Cosmos DB SDK把构造好的对象直接写入容器,SDK会自动序列化成嵌套JSON。

方案3:PowerShell/CLI脚本(小数据量场景)

如果你的数据量不大,用脚本一次性处理更高效:

  • 用Get-AzTableRow读取Azure Table的所有实体。
  • 遍历每个实体,构造嵌套的JSON对象。
  • 用New-CosmosDbDocument把对象写入Cosmos DB。

总结

如果是大规模数据迁移,ADF的派生列转换是最简便的无代码方案;如果数据量小或者需要灵活逻辑,Azure Function或脚本会更合适。之前你可能没注意到ADF可以构造嵌套对象,这个功能刚好能解决你的扁平化转嵌套需求。

内容的提问来源于stack exchange,提问作者lahsrah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 04:39:07