【问题标题】:Polybase converting sql to ansi sql for a sybase connectionPolybase 将 sql 转换为 ansi sql 用于 sybase 连接
【发布时间】:2020-04-28 08:40:17
【问题描述】:

我有一个到 sybase 服务器的 polybase 连接。

在我的外部表上,我不能使用 top 命令,因为 poly-base 会将其转换为限制

例子:

SELECT TOP (1000) *
FROM [polygrab].[dbo].[ExtEvent_test]

无法针对链接服务器“(null)”的 OLE DB 提供程序“MSOLEDBSQL”执行查询“远程查询”。 105082;通用 ODBC 错误:[SAP][ODBC 驱动程序][SQL Anywhere]第 3 行的“限制”附近的语法错误。

我也将此服务器作为链接服务器,并且通过 SAOLEDB.17 提供程序支持顶级命令。 但是我不知道这是否是问题或如何改变它。

我的外部数据连接如下:

CREATE EXTERNAL DATA SOURCE [TicketMaster] WITH (
    LOCATION = N'odbc://externalserver.com:50459'
    , CONNECTION_OPTIONS = 'DRIVER={SQL Anywhere 17};
    Host=externalserver.com:50459; 
    Provider = ''SAOLEDB.17'';
    ServerName= <servername>;
    DatabaseName=<databasename>;'
    , CREDENTIAL = [PolyFriend2]
    )

【问题讨论】:

  • 提供者 = ''SAOLEDB.17'';据我所知没用,我只是添加它进行测试
  • 仅供我理解;您的远程数据库是 SAP 的 SQL Anywhere,并且该数据库不支持 LIMIT 语法?如果您从应用程序执行语句会发生什么,即不在 PolyBase 上执行,它会起作用吗?我问是因为您说 PolyBase 将 TOP 转换为 LIMIT,我想知道这是否与 ODBC 驱动程序无关。
  • 所以我还将 SAP SQL Anywhere 连接为链接服务器(使用相同的驱动程序),在 SSMS 中我可以看到架构。我也可以执行像SELECT TOP 100 * FROM SAP.DB.SCHEMA.TABLE 这样的语句。我将日志记录在连接上,我可以看到在初始化时它们使用不同的 exe。当链接服务器连接使用系统 DSN 时,会启动一个 sql exe,当 polybase 启动时,会使用一个特殊的 polybase sql 连接器。所以驱动程序目前正在使用更标准的 ODBC 连接而不是 polybase

标签: sql sybase polybase


【解决方案1】:

与一些使用 PolyBase 功能的 Microsoft 人员交谈。

创建外部数据源时,默认情况下PUSHDOWNON。您遇到的问题是通用 ODBC 数据源的下推功能处于早期阶段,生成的 SQL 可能不是源预期的方言。这里似乎就是这种情况。

所以尝试使用PUSHDOWN = OFF 创建数据源,看看是否有帮助。或者,您可以使用以下选项禁用查询中的下推:OPTION (DISABLE EXTERNAL PUSHDOWN)。所以像:

SELECT TOP (1000) *
FROM [polygrab].[dbo].[ExtEvent_test]
OPTION (DISABLE EXTERNAL PUSHDOWN);

检查并查看这是否有效。

【讨论】:

  • 这工作,下推关闭它似乎比链接服务器工作慢,但它工作。
  • 最好使用PUSHDOWN ON 创建数据源,并在查询中使用OPTIONS
猜你喜欢
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
相关资源
最近更新 更多