微软州表示:
...You还可以使用通用ODBC连接器来使用第三方ODBC驱动程序连接到其他提供程序。
现实与此相距甚远。
关于如何从导轨查询DB2,我一直在跟踪几个PolyBase。我知道这应该是可能的。我还找到了关于如何通过ODBC驱动程序查询SalesForce的指南,所以是的,您应该能够查询很多东西。
我能够成功地创建和执行的唯一稳定代码是:
-- Create a database
CREATE DATABASE Test_PolyBase;GO
-- Use that database
USE Test_PolyBase;GO
-- Create a database master key.
ALTER MASTER KEY ENCRYPTION BY PASSWORD = 'password';GO
-- Set DB2 user and password
ALTER DATABASE SCOPED CREDENTIAL Test_PolyBase
WITH IDENTITY = 'db2inst1' --put here DB2's username
,SECRET = 'db2_password';--put here DB2's password
GO从那以后就是一个没有男人的土地,那里没有人真正知道下一步是什么。
我已经使用IBM DB2 ODBC DRIVER - DB2COPY1驱动程序成功地创建了一个系统DSN:

但随后:
CREATE EXTERNAL DATA SOURCE Test_PolyBase
WITH (
LOCATION = 'odbc://192.168.1.44:50000'
,CONNECTION_OPTIONS = 'DSN={testdb}'
--,PUSHDOWN = ON
,CREDENTIAL = Test_PolyBase
)不起作用。
我尝试使用更详细的设置和Driver本身,而不是DSN:
CREATE EXTERNAL DATA SOURCE Test_PolyBase
WITH (
LOCATION = 'odbc://192.168.1.44'
,CONNECTION_OPTIONS = 'Driver={IBM DB2 ODBC DRIVER - DB2COPY1};PolyBaseOdbcSupportsSetDescRec=false'
--,PUSHDOWN = ON
,CREDENTIAL = Test_PolyBase
);我还用了一个更详细的例子:
CREATE EXTERNAL DATA SOURCE Test_PolyBase
WITH (
LOCATION = 'odbc://192.168.1.44:50000'
,CONNECTION_OPTIONS = 'Dsn={testdb};
Driver={IBM DB2 ODBC DRIVER - DB2COPY1};
uid=root;
server=192.168.1.44;
port=50000;
database=testdb;
PolyBaseOdbcSupportsSetDescRec=false'
--,PUSHDOWN = ON
,CREDENTIAL = Test_PolyBase
)我使用的是示例中描述的PolyBaseOdbcSupportsSetDescRec=false 选项,但没有喜悦,错误总是相同的:
OLE DB provider "MSOLEDBSQL" for linked server "(null)" returned message "Cannot generate SSPI context".
Msg -2146893042, Level 16, State 1, Line 0
SQL Server Network Interfaces: No credentials are available in the security packageServer为什么要使用OLE DB provider "MSOLEDBSQL"?这应该适用于Server,对吗?不是DB2?!
为什么是...for linked server "(null)" (这意味着我没有指示链接的服务器)?我根本不应该使用链接服务器。
编辑:经过广泛的调查,我更确定这顶帽子可能被标记为一个bug。
实际上,kb4552255正在指定:
在通用ODBC外部数据源定义的PolyBase中指定DSN时,可以访问CONNECTION_OPTIONS附带的配置。这些选项是通过匹配DSN定义中使用的驱动程序名称来获得的。这目前适用于以下驱动程序:·IBM DB2 ODBC驱动程序·HDBODBC·驱动程序。
因此,答覆中所提供的例子应能奏效。有DSN,但也有司机。
发布于 2022-06-29 15:07:26
当您创建链接服务器时,它使用OLE,它似乎与DB2一起工作,但是Polybase不能只使用OLE。
你启用多基地了吗?我想是的。
EXEC sp_configure @configname = 'polybase enabled', @configvalue = 1
RECONFIGURE为什么要使用ALTER而不是CREATE?主密钥加密和数据库作用域凭据以前存在吗?我只对两者都使用了CREATE。
我有一些ODBC外部数据源的示例,看看是否需要指定其他属性,但不要使用“驱动程序”规范,而是使用"DSN“规范:
CREATE EXTERNAL DATA SOURCE [MySpark] WITH (
LOCATION='odbc://pabechevb.azurehdinsight.net:443',
CONNECTION_OPTIONS='Driver={Microsoft Spark ODBC Driver}; AuthMech=6;',
CREDENTIAL=[SparkCredential])
CREATE EXTERNAL DATA SOURCE [Cassandra] WITH (
LOCATION='odbc://192.168.1.5:9042',
CONNECTION_OPTIONS='Driver={DataStax Cassandra ODBC Driver}; Host=192.168.1.5; AuthMech=1;',
CREDENTIAL=[CassandraCred])
CREATE EXTERNAL DATA SOURCE [Sap] WITH (
LOCATION='odbc://40.123.224.129:39015',
CONNECTION_OPTIONS='Driver={HDBODBC}; SERVERNODE=40.123.224.129:39015;',
CREDENTIAL=[SapCredential])试着摆脱SSPI消息,这一切都表明您没有正确地进行身份验证。如果您收到这条消息,您将陷入困境,因为没有出路: Msg 105082,级别16,状态1,第12行105082;通用ODBC错误:微软驱动程序在SQL_HANDLE_ENV上的SQLAllocHandle失败。
https://dba.stackexchange.com/questions/313844
复制相似问题