首页 > 解决方案 > Polybase 无法在 XLSX 目标上放置 WHERE 条件

问题描述

我的 T-SQL 查询中的WHERE条件没有返回任何行,从 SQL 2019 polybase 到 .XLSX 文件

这是我创建 Polybase 的代码:

create master key encryption by password = 'Polybase2CSV';
    create external data source myODBCxlsx with
    (
        LOCATION = 'odbc://localhost',
        CONNECTION_OPTIONS = 'Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}; DBQ=F:\PolybaseSourceData\CustomerData.xlsx'
    );


create external table CustomerData(
CUSTOMERID FLOAT(53),
CUSTOMERNAME Nvarchar(255),
DEPARTMENT Nvarchar(255)
) with (
LOCATION='[sheet1$]',
DATA_SOURCE=myODBCxlsx
);

此查询有效:

select * from customerData

但是,这不会:

select * from customerData where customername = 'Steve'

尽管有一位名叫 Steve 的客户,但该查询不返回任何行。

标签: sql-serverpolybase

解决方案


如果您在创建外部数据源时未指定设置,则默认情况下会自动启用 PUSHDOWN。不幸的是,该特定驱动程序在启用 PUSHDOWN 的情况下无法工作,因此您将在简单查询时遇到错误。关闭 PUSHDOWN 将解决该问题。

外部数据源定义应如下所示:

create external data source myODBCxlsx with
(
    LOCATION = 'odbc://localhost',
    CONNECTION_OPTIONS = 'Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}; DBQ=F:\Files\CustomerData.xlsx',
    PUSHDOWN=OFF
);

推荐阅读