SE の雑記

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

SQL Server 2016 CTP 2.0 の PolyBase で Azure ストレージの BLOB データを操作してみる

2 comments

SQL Server 2016 では PDW に含まれていた、PolyBase の機能が使用できるようになります。
詳細については PolyBase を参照していただければと。
PolyBase では、Hadoop と Azure BLOB ストレージに接続をすることができます。
BLOB ストレージに接続するための手順を軽くまとめてみたいと思います。
手順については、Using #PolyBase in #SQLServer2016? / Polybase in SQL Server 2016 CTP 2 が直近の情報になるかと思います。
去年の情報になりますが PolyBase in APS – Yet another SQL over Hadoop solution? も参考になるかと。

PolyBase を使用するためには、Getting started with PolyBase に書かれているように JRE が必要となります。

Oracle Java SE RunTime Environment (JRE) version 7.51 or higher. Go to downloads. The installer will fail if JRE is not present.

JRE のインストール と SQL Server 2016 CTP 2.0 の PolyBase をインストールする際の照合順序について が終わっていれば、導入自体はサクッと終るかと思います。
PolyBase は最初に sp_configure で PolyBase Configuration Options (Transact-SQL) の設定を最初にする必要があります。
これにより接続先が設定されます。
今回は Azure ストレージの BLOB に接続を行いますので「4」に設定しています。

sp_configure 'hadoop connectivity', 4;
reconfigure

変更後の注意点としては、

After running RECONFIGURE, you need to stop and restart the PolyBase Engine service.

があり、Plybase Engine service を再起動する必要があるのが注意点かと。
# SQL Server のサービスも再起動しないと駄目かもしれないです。
これで事前準備は完了ですので設定を行っていきます。

CREATE DATABASE TEST
DBCC TRACEON(4631,-1)
USE TEST
CREATE MASTER KEY ENCRYPTION BY PASSWORD='MyP@ssword123';
CREATE CREDENTIAL AzureBlob  -- 任意の設定
ON DATABASE WITH
IDENTITY = 'AzureBLOB', -- 任意の設定
SECRET='<Azure ストレージのストレージアカウントキー>;
CREATE EXTERNAL DATA SOURCE AzureData
WITH (
    TYPE = HADOOP,
    LOCATION = 'wasbs://<コンテナー>@<ストレージアカウント>.blob.core.windows.net/',
    CREDENTIAL = AzureBlob
);

この設定で、接続に必要なデータソースの定義ができます。
TF 4631 は、CREATE CREDENTIAL を ON DATABASE で実行するために必要となる TF になります。
これで、Azure ストレージに接続するための資格情報が作成できますので、その資格情報を使用して外部データソースの定義を行います。
ストレージアカウントの設定については、LOCATION で設定するため、資格情報の名称や IDENTITY はストレージアカウントとは異なる名称で問題ありません。
# 資格情報はストレージアカウントキーのみが、接続するストレージの情報の必要があります。
今回は「test」というコンテナーに格納されている「test.tbl」というファイルに対して接続を行います。
image
このファイルは、以下のように CSV 形式のファイルとなっています。
image
このファイルを外部テーブルとして認識できるように、外部ファイルが CSV ということ設定を追加します。

CREATE EXTERNAL FILE FORMAT CSV
WITH (
    FORMAT_TYPE = DELIMITEDTEXT,
    FORMAT_OPTIONS (
        FIELD_TERMINATOR = ','
    )
);

 
これで外部リソースとして、「データソース」「ファイル形式」が追加できた状態となります。
image
最後にこれらを使用して外部テーブルを定義します。

CREATE EXTERNAL TABLE AzureBlob
(
Col1 int,
Col2 varchar(100)
)
WITH
(
    LOCATION = '/test.tbl',
    DATA_SOURCE = AzureData,
    FILE_FORMAT = CSV
)

 
以上で、BLOB のファイルをテーブルとしてマッピングするための設定は完了です。
これにより、BLOB のデータを SQL で操作できるようになります。
以下のようなクエリを実行すれば、クエリから件数を取得することができます。

SELECT COUNT(*) FROM AzureBLOB

この際の実行プランは以下のようになります。
Remote Query として、PolyBase により実行されていることが確認できます。
image
クエリの流れを見ていた限りは大量データの検索はちょっと厳しそうな感じを受けましたが。
BLOB のデータをクエリ経由で変更することはできないようですが、SELECT INTO 等で、BLOB のデータをテーブルに移動することはできます。

SELECT * INTO BlobTmp FROM AzureBLOB

 
まだ、情報をあまり追えていないのですが、Hadoop と異なり、Azure ストレージのデータを扱う場合の、分散処理は難しいのでしょうかね。(できる場合、どのような感じになるのだろう。。。。)

Share

Written by Masayuki.Ozawa

6月 11th, 2015 at 10:59 pm

Posted in SQL Server

Tagged with ,

2 Responses to 'SQL Server 2016 CTP 2.0 の PolyBase で Azure ストレージの BLOB データを操作してみる'

Subscribe to comments with RSS or TrackBack to 'SQL Server 2016 CTP 2.0 の PolyBase で Azure ストレージの BLOB データを操作してみる'.

  1. 分散処理は、CTP 3 を待つことになるのかも.
    “To improve query performance, in CTP3, users will be able to create a cluster of SQL Server instances working together to process large data sets from external data sources, such as Hadoop or Azure Blob Storage, in a scale-out fashion”
    https://msdn.microsoft.com/en-us/library/mt143171(v=sql.130).aspx

    Yoshihiro Kawabata

    12 6月 15 at 05:25

  2. 情報ありがとうございます。
    CREATE EXTERNAL TABLE も CTP3 で変わるようなので、CTP3 が触れるようになったら、こちらと合わせて再度確認してみます。
    In CTP2, the export functionality is not supported, i.e. permanently storing SQL data into the external data source. This functionality will be available in CTP3.
    https://msdn.microsoft.com/en-us/library/dn935021(v=sql.130).aspx

    masayuki.ozawa

    12 6月 15 at 07:51

Leave a Reply