我们可以将Cosmos DB连接到SSRS吗?

时间:2019-02-12 11:36:35

标签: reporting-services azure-cosmosdb

我必须在SSRS报表中使用Azure Cosmos DB。我使用了ODBC连接器。我能够使用简单的选择查询来获取数据。但是无法在SSRS报告中调用存储过程或函数。是否可以像SSRS那样调用Cosmos DB存储过程?

3 个答案:

答案 0 :(得分:1)

Cosmos DB不是关系数据库,其过程用Javascript编写是与问题无关的事实。

有几种方法可以通过SQL Server中的存储过程直接和间接查询Cosmos中的数据,而该存储过程又可以用作SSRS报告的数据源。

1)编写一个Python脚本,该脚本连接到Cosmos DB,将您要查找的数据查询到JSON文档中,并将其写入文件https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-python-samples中。

如果Cosmos中的此查询需要扫描多个分区中的文档,则可以启用跨分区查询。 “要跨分区运行查询,请将EnableCrossPartitionQuery设置为true(或REST API中的x-ms-documentdb-query-enablecrosspartition)。 https://docs.microsoft.com/en-us/azure/cosmos-db/how-to-query-container

2)在SQL Server中创建一个存储过程。在SQL Server存储过程中使用xp_cmdshell来执行步骤1中的Python脚本。或者,您可以在SQL Server中通过powershell步骤创建代理作业-存储过程可以执行此作业。

https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/xp-cmdshell-transact-sql?view=sql-server-ver15

Run Python Script from MSSQL

在该过程中使用BULK INSERT将文件中的JSON数据插入SQL Server的表中,然后使用T-SQL OPENJSON函数将JSON解析为列形式。

https://docs.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql?view=sql-server-ver15

3)将存储过程添加为SSRS报告的数据源。

如果您使用的是MongoAPI,还可以使用SQL Server 2019中的Polybase直接查询Cosmos。

https://docs.microsoft.com/en-us/sql/relational-databases/polybase/polybase-configure-mongodb?view=sql-server-ver15

答案 1 :(得分:0)

Cosmos DB不是关系数据库,并且它的存储过程与SQL Server存储过程不同(并且Cosmos DB存储过程中没有SQL;仅JavaScript,针对特定分区中的文档执行)。

您不能从SSRS调用Cosmos DB存储过程。您只能通过SDK(或REST API)调用来调用Cosmos DB存储的proc。

答案 2 :(得分:0)

  1. 使用 Cosmos DB ODBC 连接器将 Cosmos DB 连接到 SQL。

https://docs.microsoft.com/en-us/azure/cosmos-db/odbc-driver#connect

  1. 使用如下所示的 OPENQUERY 命令创建一个存储过程来调用 Cosmos 对象。
Select * FROM OPENQUERY( select * from [CosmosDB].[Table] )

https://www.sqlshack.com/link-an-azure-cosmos-db-into-a-sql-server-stored-procedure/

  1. 一旦有了存储过程,它应该很容易在 SSRS 中使用。