我正在关注this tutorial并创建了 Azure MongoDB (Mongo API) 和 Synapse Workspace,将 ECDC 数据导入 MongoDB 并将其连接到 Synapse Workspace。到目前为止,一切都很好。
但是,当我查询数据时,例如我得到的字符串列 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
最佳答案
当我使用 CosmosDB for Mongo API 时,我尝试在我的环境中重现类似的事情并获得类似的输出数据类型的值:
这可能是因为MongoDB 的 Azure Cosmos DB API 通过 BSON 格式以文档结构存储数据。它是 JSON 文档的二进制编码序列化。 BSON 已进行扩展,添加了一些可选的非 JSON 原生数据类型,例如日期和二进制数据。
Cosmos DB API for MongoDB
旨在提供 MongoDB 体验,并通过将应用程序指向 MongoDB 帐户的连接字符串的 API 来继续使用您最喜爱的 MongoDB 驱动程序、SDK 和工具。
当我使用 CosmosDB for SQL API
尝试类似的操作时,它以 Json 格式存储数据,并且给出了适当的结果。
有关 BSON 的更多信息,请参阅此 Document
关于mongodb - Azure MongoDB + Synapse 链接 : Column values unexpectedly contain JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74309581/