首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PolyBase ::如何通过ODBC建立外部数据源?

PolyBase ::如何通过ODBC建立外部数据源?
EN

Database Administration用户
提问于 2022-06-28 10:59:14
回答 1查看 731关注 0票数 2

微软表示:

...You还可以使用通用ODBC连接器来使用第三方ODBC驱动程序连接到其他提供程序。

现实与此相距甚远。

关于如何从导轨查询DB2,我一直在跟踪几个PolyBase。我知道这应该是可能的。我还找到了关于如何通过ODBC驱动程序查询SalesForce的指南,所以是的,您应该能够查询很多东西。

我能够成功地创建和执行的唯一稳定代码是:

代码语言:javascript
复制
-- 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:

但随后:

代码语言:javascript
复制
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

代码语言:javascript
复制
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
            );

我还用了一个更详细的例子:

代码语言:javascript
复制
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 选项,但没有喜悦,错误总是相同的:

代码语言:javascript
复制
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 package

Server为什么要使用OLE DB provider "MSOLEDBSQL"?这应该适用于Server,对吗?不是DB2?!

为什么是...for linked server "(null)" (这意味着我没有指示链接的服务器)?我根本不应该使用链接服务器。

编辑:经过广泛的调查,我更确定这顶帽子可能被标记为一个bug。

实际上,kb4552255正在指定:

在通用ODBC外部数据源定义的PolyBase中指定DSN时,可以访问CONNECTION_OPTIONS附带的配置。这些选项是通过匹配DSN定义中使用的驱动程序名称来获得的。这目前适用于以下驱动程序:·IBM DB2 ODBC驱动程序·HDBODBC·驱动程序。

因此,答覆中所提供的例子应能奏效。有DSN,但也有司机。

EN

回答 1

Database Administration用户

发布于 2022-06-29 15:07:26

当您创建链接服务器时,它使用OLE,它似乎与DB2一起工作,但是Polybase不能只使用OLE。

你启用多基地了吗?我想是的。

代码语言:javascript
复制
EXEC sp_configure @configname = 'polybase enabled', @configvalue = 1
RECONFIGURE

为什么要使用ALTER而不是CREATE?主密钥加密和数据库作用域凭据以前存在吗?我只对两者都使用了CREATE。

我有一些ODBC外部数据源的示例,看看是否需要指定其他属性,但不要使用“驱动程序”规范,而是使用"DSN“规范:

代码语言:javascript
复制
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失败。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/313844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档