SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server 2019 CU2 で PolyBase の接続性が改善されています

leave a comment

先日、SQL Server 2019 CU2 がリリースされました。

今回の CU では SQL Server 2019 でログ配布を設定した場合に、ログ配布の履歴用のジョブでエラーが発生した問題の解消 などが行われているのですが、それ以外にも PolyBase の外部テーブルの接続性に影響を与える改善が行われています。

一つ目は Oracle の外部テーブルを作成する場合の改善です。

RTM 時点の PolyBase では、Oracle 12.2 以降に接続を使用とした場合、次のようなエラーが発生することがありました。

Msg 105082, Level 16, State 1, Line LineNumber

105082;Generic ODBC error: [Microsoft][ODBC Oracle Wire Protocol driver][Oracle]ORA-28040: No matching authentication protocol Additional error <2>: ErrorMsg: [Microsoft][ODBC Oracle Wire Protocol driver][Oracle]ORA-28040: No matching authentication protocol, SqlState: HY000, NativeError: 28040 .

PolyBase で標準に含まれている ODBC ドライバーは、Oracle 12.2 以降で接続をしようとした場合は、Oracle 側の sqlnet.ora に次の設定がされていないと接続ができないケースがありました。

SQLNET.ALLOWED_LOGON_VERSION_SERVER = 11
SEC_CASE_SENSITIVE_LOGON = false

CU2 に含まれている Oracle 向けの ODBC ドライバーはバージョンアップされているため、上記の設定が Oracle 側に行われていなくても接続が可能になりましたので、PolyBase で Oracle のデータの取り扱いやすさが向上しています。

 

もう一つの改善が Excel との接続です。

Excel の ODBC ドライバーは標準で含まれていませんので、Windows 版の SQL Server 2019 の環境に Excel 向けの ODBC ドライバーをインストールして、PolyBase からアクセスする必要があります。

Microsoft が提供している Excel の ODBC ドライバーとしては Access の再頒布可能コンポーネントに含まれている ODBC ドライバーがあります。

SQL Server 2019 CU1 までは、この ODBC ドライバーを使用して PolyBase 経由でアクセスをしようとすると、次のようなエラーとなってしまいアクセスすることができませんでした。

Msg 105082, Level 16, State 1, Line LineNumber

105082;Generic ODBC error: [Microsoft][ODBC Excel Driver]Optional feature not implemented

そのため、CData の Excel ODBC ドライバーを使用して接続をする等の方法をとる必要があったのですが、CU2 では Access の再頒布可能コンポーネントに含まれている Excel ODBC ドライバーで接続できるようになりました。

(Preview 版までは Access の再頒布可能コンポーネントが使用できており、途中で使用できなくなったのですが、これ不具合だったんですかね)

Access の再頒布可能コンポーネントに含まれる Excel ODBC ドライバーで接続する場合は次のようなクエリとなります。

CREATE EXTERNAL DATA SOURCE ExcelODBC
WITH ( 
LOCATION = 'odbc://localhost',
CONNECTION_OPTIONS = 'Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=E:\temp\Book1.xlsx'
);
GO

DROP EXTERNAL TABLE ExcelTable
GO

CREATE EXTERNAL TABLE ExcelTable(
	C1 float,
	C2 NVARCHAR(255)  COLLATE Japanese_XJIS_140_CI_AS,
	C3 datetime
)
WITH (
	LOCATION='[Sheet1$]',
	DATA_SOURCE=ExcelODBC
);
GO

 

お手軽に PolyBase で Excel で接続ができるようになったのはうれしいですね。

Written by masayuki.ozawa

2月 15th, 2020 at 3:52 pm

Posted in SQL Server

Tagged with ,

Leave a Reply

*