以前版本访问外部数据源使用的是 链接服务器,SQL Server 2019 可以配置 PolyBase 访问 Hadoop、Azure Blob Storage、SQL Server、Oracle、Teradata、MongoDB 。当然需要安装 PolyBase 查询服务。
当前配置 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 。
测试结果: