SE の雑記

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

SQL Server 2019 CTP 2.0 の PolyBase のセットアップについて

leave a comment

SQL Server 2019 で PolyBase の機能強化が行われています。
セットアップの方法や今までの PolyBase との違いについて、少しわかりずらいところがあるので軽くまとめて置きたいと思います。
SQL Server 2019 の PolyBase については What is PolyBase? で情報を確認することができます。
現時点では Windows Only となっており、SQL Server on Linux では使用することはできません。
Ignite 2018 の BRK3228 – What’s new in SQL Server on Linux and containers では SQL Server on Linux は Planned となっており、Big Data Cluster では先行して導入されていますので、もう少しすると足並みがそろうのではないでしょうか。

次の画像は、SQL Server 2019 CTP 2.0 のインストーラーですが、SQL Server 2019 では、PolyBase は、次の 2 種類のコンポーネントで構成されます。

  • 外部データ用 PolyBase クエリ サービス
    • Oracle、Teradata、SQL Server などのリレーショナルおよび非リレーショナルなデータ間で標準 T-SQL ステートメントを使った十分に統合されたクエリを可能にする PolyBase テクノロジを含みます。
  • HDFS データ ソースの Java コネクタ
    • HDFS データで標準 T-SQL ステートメントを使った十分に統合されたクエリを可能にする PolyBase Java Connector を含みます。

image
「外部データ用 PolyBase クエリ サービス」が、SQL Server 2019 で新しく追加された PolyBase の機能となっており、SQL Server 2017 までの PolyBase は「HDFS データ ソースの Java コネクタ」という PolyBase のサブコンポーネントとなっています。
そのため、SQL Server 2019 で新規実装された新しいコネクターの PolyBase の利用のみであれば、「外部データ用 PolyBase クエリ サービス」のインストールのみで利用することができ、こちらについては Java をインストールする必要はありません。
こちらは、Java ではなく Microsoft Visual C++ 2012 再頒布可能パッケージ をインストールする必要があります。
SQL Server 2017 までの PolyBase は HDFSデータソースの Java コネクタという名の通り、Java をインストールする必要があり、こちらについては外部データソースとして「HADOOP」を指定する際に必要となる機能です。
現時点では、HDFS と Azure BLOB ストレージに接続する場合には、こちらになるかと。
この違いについても Ignite 2018 の BRK4021 – Deep dive on SQL Server and big data で解説されており、次のようなスライドで説明が行われていました。
clip_image001
インストール後の設定も今までと少し変わっており、Install PolyBase on Windows に記載されています。
今までの PolyBase であれば、次のようなクエリを実行して設定を変更した後に SQL Server と PolyBase のサービスを実行することで利用可能となっていました。


EXEC sp_configure 'hadoop connectivity', 7
reconfigure

 
SQL Server 2019 では、これだけでは外部データソースの作成時に構文エラーとなってしまうかと。
SQL Server 2019 では、次のようなクエリを実行して、SQL Server と PolyBase のサービスを再起動することで、機能を使用することができるようになります。
2017 までの HDFS コネクターを使用する場合は、「polybase enabled」と「hadoop connectivity」の両方を有効にしてください。
(どちらにしても PolyBase を使う場合は「polybase enabled」の有効化は必要です)
 

EXEC sp_configure 'polybase enabled', 1
reconfigure

これにより、PolyBase が利用できるようになります。
新しいコネクターで SQL Server に対して接続する場合は、次のような構文となります。

CREATE DATABASE SCOPED CREDENTIAL SqlServerCredentials
WITH IDENTITY = '<ログイン>', Secret = '<パスワード>';
CREATE EXTERNAL DATA SOURCE SqlServerInstance
WITH (
LOCATION = 'sqlserver://<SQL Server コンピューター名 or IP アドレス>',
CREDENTIAL = SqlServerCredentials
);

 
これで、外部データソースが作成できるようになります。
Configure PolyBase to access external data in SQL Server には、外部データソースの 「vendor」の具体的な名称が記載されていませんが、SQL Server の場合は「sqlserver」になります。
(Oracle の場合は oracle / MongoDB の場合は mongodb を指定することになるかと)
(補足 : 2018/10/10 時点のドキュメントでは Location URI のベンダーが記載されました)
文字型は照合順序の補正が必要となるケースがありますが、次のような形式で外部テーブルを作成することができます。
(LOCATION には、接続先の DB で利用するテーブル名を 3 パート名修飾で指定します)

CREATE EXTERNAL TABLE AzureSQLDB
(
	[N_NATIONKEY] [int] NOT NULL,
	[N_NAME] [char](25) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
	[N_REGIONKEY] [int] NOT NULL,
	[N_COMMENT] [varchar](152) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
)
WITH
(
    LOCATION = 'tpch.dbo.NATION',
    DATA_SOURCE = SqlServerInstance
);

PolyBase はログを「C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log\Polybase」に出力していますので、うまく動作しない場合などは、このディレクトリ内のログを確認するとよいかと。

Share

Written by Masayuki.Ozawa

10月 8th, 2018 at 10:54 pm

Posted in SQL Server

Tagged with ,

Leave a Reply