Javascript 将JSON数据从Azure SQL DB迁移到Cosmos DB会产生字符串值
我正在尝试使用CosmosDB数据迁移工具从SQL DB迁移数据,我成功地从SQL DB迁移了数据,但结果是所有值都是字符串 想知道在迁移过程中是否有办法将这些JSON转换为对象 这是我的示例查询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, '
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文件,使用您喜爱的工具进行任何重新格式化,并使用Cosmos迁移工具导入清理后的CSV或JSON文件 例如,对于PowerShell,流程可以是:
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)?