SQL Server 配置 PolyBase 访问外部 Mongodb

时间:2024-03-27 08:17:18

以前版本访问外部数据源使用的是 链接服务器,SQL Server 2019 可以配置 PolyBase 访问 Hadoop、Azure Blob Storage、SQL Server、Oracle、Teradata、MongoDB 。当然需要安装 PolyBase 查询服务。

SQL Server 2019 配置 PolyBase 访问外部 Mongodb

当前配置 PolyBase 访问外部 Mongodb ,参考:Configure PolyBase to access external data in MongoDB

USE master
GO
exec sp_configure 'polybase enabled',1
reconfigure with override
go


USE Test
GO

-- 1. 创建 MASTER KEY
-- DROP MASTER KEY
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'S0me!nfo'
GO

-- 2. 创建数据库范围凭证
-- DROP DATABASE SCOPED CREDENTIAL MongoDBCredentials 
CREATE DATABASE SCOPED CREDENTIAL MongoDBCredentials 
WITH IDENTITY = 'admin', Secret = 'admin'  -- mongodb 访问账号密码
GO

-- 3. 创建外部数据源
-- DROP EXTERNAL DATA SOURCE MongoInstance
CREATE EXTERNAL DATA SOURCE MongoInstance
WITH (
	LOCATION = 'mongodb://10.10.10.9:27017',	--mongodb服务器
	PUSHDOWN = ON,
	CREDENTIAL = MongoDBCredentials,			--上面创建的凭证
	CONNECTION_OPTIONS = 'ssl=false;'
)
GO

-- 4. 创建独立的 mongodb 模式
CREATE SCHEMA MongoDB
GO

-- 5. 创建外部虚拟表,引用的是上面定义的外部数据源(数据类型要求与mongdo中一致,报错时可看到)
-- DROP EXTERNAL TABLE MongoDB.tab
CREATE EXTERNAL TABLE MongoDB.tab(
	[_id] NVARCHAR(24) NOT NULL,    --其他字段运行为NULL, 因为非结构化
	[id] FLOAT(53) NULL,
	[name] NVARCHAR(4000) NULL,
	[size] FLOAT(53) NULL
)
WITH (
	LOCATION='local.tab',  --对应mongodb中的 <database>.<collection>
	DATA_SOURCE= MongoInstance --上面创建的数据源
)
GO

-- 6. 创建统计信息
CREATE STATISTICS OrdersOrderKeyStatistics ON MongoDB.tab([id]) WITH FULLSCAN
GO

因为官方文档资料不是很清除,踩了一些坑,上面的脚本已补充说明。

创建数据源若不使用 CONNECTION_OPTIONS = 'ssl=false;' ,则报错如下:

消息 105082,级别 16,状态 1,第 44 行
105082;一般 ODBC 错误: [Microsoft][MongoDBODBC] (110) Error from MongoDB Client: No suitable servers found (`serverSelectionTryOnce` set): [connection closed calling ismaster on '10.10.10.9:27017'] (Error Code: 13053) Additional error <2>:ErrorMsg: [Microsoft][MongoDBODBC] (110) Error from MongoDB Client:No suitable servers found (`serverSelectionTryOnce` set): [connection closed calling ismaster on '10.10.10.9:27017'] (Error Code: 13053), SqlState: HY000, NativeError: 110 。
 

测试结果:

SQL Server 2019 配置 PolyBase 访问外部 Mongodb