SQL Server 2019 配置 PolyBase 访问外部 Mongodb

以前版本访问外部数据源使用的是 链接服务器,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