Javascript 将JSON数据从Azure SQL DB迁移到Cosmos DB会产生字符串值

Javascript 将JSON数据从Azure SQL DB迁移到Cosmos DB会产生字符串值,javascript,azure,azure-sql-database,azure-cosmosdb,Javascript,Azure,Azure Sql Database,Azure Cosmosdb,我正在尝试使用CosmosDB数据迁移工具从SQL DB迁移数据,我成功地从SQL DB迁移了数据,但结果是所有值都是字符串 想知道在迁移过程中是否有办法将这些JSON转换为对象 这是我的示例查询 select json_value(Data, '$.timestamp') as timestamp, json_query(Data, '$.Product.detail') as [Product.detail], json_value(Data, '

我正在尝试使用CosmosDB数据迁移工具从SQL DB迁移数据,我成功地从SQL DB迁移了数据,但结果是所有值都是字符串

想知道在迁移过程中是否有办法将这些JSON转换为对象

这是我的示例查询

select 
       json_value(Data, '$.timestamp') as timestamp,
       json_query(Data, '$.Product.detail') as [Product.detail],
       json_value(Data, '$.Product.price') as [Product.price]

from myTable

嵌套分隔符:。

一个选项是将SQL数据导出为纯CSV文件,使用您喜爱的工具进行任何重新格式化,并使用Cosmos迁移工具导入清理后的CSV或JSON文件

例如,对于PowerShell,流程可以是:

  • 将SQL数据导出到CSV
  • 使用PowerShell以自定义对象数组的形式读取数据
  • 使用PowerShell修改内存中的自定义对象以转换类型、重新格式化、验证等
  • 使用或将清理后的数据导出回CSV或JSON
  • 使用Cosmos数据迁移工具导入已清理的文件

  • 一个选项是将SQL数据导出到普通CSV文件,使用您喜爱的工具进行任何重新格式化,并使用Cosmos迁移工具导入清理后的CSV或JSON文件

    例如,对于PowerShell,流程可以是:

  • 将SQL数据导出到CSV
  • 使用PowerShell以自定义对象数组的形式读取数据
  • 使用PowerShell修改内存中的自定义对象以转换类型、重新格式化、验证等
  • 使用或将清理后的数据导出回CSV或JSON
  • 使用Cosmos数据迁移工具导入已清理的文件

  • 1.创建数据流并使用SQL DB作为源

    2.在源代码选项中选择查询:

    SQL:

    3.创建一个
    派生列
    ,并更改列的类型。
    产品的表达式

    @(detail=split(replace(replace(replace(byName('Product.detail'),'[',''),']',''),'"',''),','),
            price=toDouble(byName('Product.price')))
    

    4.选择Cosmos DB作为接收器,映射如下:

    5.创建一个管道并添加您之前创建的数据流,然后单击调试按钮或添加触发器来执行它。

    6.结果:

    {
         "Product": {
            "price": 300.56,
            "detail": [
                "eee",
                "fff"
            ]
        },
        "id": "d9c66062-63ce-4b64-8bbe-95dcbdcad16d",
        "timestamp": 1600329425
    }
    

    更新:

    您可以启用数据流调试按钮,并在数据预览中查看表达式的结果


    1.创建数据流并使用SQL DB作为源

    2.在源代码选项中选择查询:

    SQL:

    3.创建一个
    派生列
    ,并更改列的类型。
    产品的表达式

    @(detail=split(replace(replace(replace(byName('Product.detail'),'[',''),']',''),'"',''),','),
            price=toDouble(byName('Product.price')))
    

    4.选择Cosmos DB作为接收器,映射如下:

    5.创建一个管道并添加您之前创建的数据流,然后单击调试按钮或添加触发器来执行它。

    6.结果:

    {
         "Product": {
            "price": 300.56,
            "detail": [
                "eee",
                "fff"
            ]
        },
        "id": "d9c66062-63ce-4b64-8bbe-95dcbdcad16d",
        "timestamp": 1600329425
    }
    

    更新:

    您可以启用数据流调试按钮,并在数据预览中查看表达式的结果



    您能给我们看一下您的样本数据吗?以及您的期望值吗?@SteveZhao很抱歉回复晚了。输出是Cosmos db容器中的JSON文档。数组和对象为双引号字符串是否要使用Azure数据工厂?不用从Cosmos数据库导出数据就可以实现这一点。@SteveZhao我会试试。但我担心的是,存储在SQL DB中的数据没有规范化。它是一个nvarchar类型的列,存储所有JSON数据。这是否仍然可以使用Azure data factory进行迁移?我已经尝试过了。我的SQL数据库中的数据很像。我可以通过Azure数据工厂访问。“如果你需要的话,我会把它贴出来。你能给我们看看你的样本数据吗?还有你的期望吗?”SteveZhao很抱歉回复晚了。输出是Cosmos db容器中的JSON文档。数组和对象为双引号字符串是否要使用Azure数据工厂?不用从Cosmos数据库导出数据就可以实现这一点。@SteveZhao我会试试。但我担心的是,存储在SQL DB中的数据没有规范化。它是一个nvarchar类型的列,存储所有JSON数据。这是否仍然可以使用Azure data factory进行迁移?我已经尝试过了。我的SQL数据库中的数据很像。我可以通过Azure数据工厂访问。如果你需要的话,我会把它贴出来。额外的导出会增加费用吗?导入Cosmos将使用你提供的吞吐量。SQL导出不确定。额外的导出会增加费用吗?导入到Cosmos将使用您提供的吞吐量。不确定SQL导出。步骤3类似于js中的concat?实际上不是。步骤3将字符串更改为数组。您可以参考这个。对不起,在发布数据流之后,我在Cosmos DB中没有看到任何没有错误的新文档。我错过什么了吗?也许你没有执行。我更新了我的答案,你可以看到步骤5。谢谢。它起作用了!顺便问一下,有没有游乐场网站或一些工具可以让我们测试表达式(步骤3)?步骤3类似于js中的concat?实际上不是。步骤3将字符串更改为数组。您可以参考这个。对不起,在发布数据流之后,我在Cosmos DB中没有看到任何没有错误的新文档。我错过什么了吗?也许你没有执行。我更新了我的答案,你可以看到步骤5。谢谢。它起作用了!顺便问一下,是否有游乐场网站或一些工具可以让我们测试表达式(步骤3)?