Azure MongoDB + Synapse链接:列值意外包含JSON

qlzsbp2j  于 2022-11-17  发布在  Go
关注(0)|答案(1)|浏览(92)

我 正在 使用 this tutorial , 并 创建 了 Azure MongoDB ( Mongo API ) 和 Synapse 工作 区 , 将 ECDC 数据 导入 MongoDB 并 在 Synapse 工作 区 中 连接 。 到 目前 为止 一切 顺利 。 但是 , 当 我 查询 数据 时 , 例如 字符 串 列 date _ rep , 我 得到 的 是 {"string":"2020-12-14"} , 而 不是 2020-12-14
我 使用 的 查询 是 :

SELECT TOP 10 *
FROM OPENROWSET(​PROVIDER = 'CosmosDB',
                CONNECTION = 'Account=analytcstest;Database=ecdc',
                OBJECT = 'ecds',
                SERVER_CREDENTIAL = 'analytcstest'
)  with ( date_rep varchar(200) ) as rows

中 的 每 一 个
当 不 指定 " with " 子句 来 自动 推断 模式 时 , 我 遇到 同样 的 问题 :

SELECT TOP 10 *
FROM OPENROWSET(​PROVIDER = 'CosmosDB',
                CONNECTION = 'Account=analytcstest;Database=ecdc',
                OBJECT = 'ecds',
                SERVER_CREDENTIAL = 'analytcstest'
)  as rows

格式

我 当然 可以 解析 它 , 就 像 这样 , 但是 我 不 明白 为什么 我 必须 这么 做 , 而且 它 不在 文档 中 ?

SELECT TOP 10 JSON_VALUE([date_rep], '$.string') AS [date_rep]
FROM OPENROWSET(​PROVIDER = 'CosmosDB',
                CONNECTION = 'Account=analytcstest;Database=ecdc',
                OBJECT = 'ecds',
                SERVER_CREDENTIAL = 'analytcstest'
)  with ( date_rep varchar(200) ) as rows

格式

rdlzhqv9

rdlzhqv91#

当我使用CosmosDB for Mongo API时,我尝试在我的环境中重现类似的东西,并获得类似的输出A值和数据类型:

这可能是因为**Azure Cosmos DB API for MongoDB通过BSON格式将数据存储在文档结构中。**它是JSON文档的二进制编码序列。BSON已扩展为添加一些可选的非JSON本机数据类型,如日期和二进制数据。
Cosmos DB API for MongoDB旨在提供MongoDB体验,并通过将您的应用程序指向API for MongoDB帐户的连接字符串,继续使用您喜爱的MongoDB驱动程序、SDK和工具。
当我尝试类似的事情与CosmosDB for SQL API它存储数据在Json格式,它是给出适当的结果。

有关BSON的更多信息,请参考Document

相关问题