SQL ServerのビッグデータとPolyBaseの使用: 外部テーブルの作成と設定方法

近年、企業が扱うデータはますます多様化し、SQL Server単体では管理しきれないケースが増えています。特に、非構造化データや異種データソース(Hadoop、Azure Blob Storage、Oracle、MongoDBなど)との連携が求められることが一般的です。

こうした課題に対応するため、PolyBaseはSQL Serverに組み込まれた強力なツールです。PolyBaseを使用することで、SQL Serverを介して外部データを簡単にクエリできるようになります。

本記事では、PolyBaseを活用し、外部テーブルを作成する方法について詳しく解説します。さらに、PolyBaseを設定して、SQL Server上で非構造化データや他のデータソースとやり取りするための具体的な手順を示します。


PolyBaseとは?

PolyBaseは、SQL Serverに外部データソースを統合するための機能です。これにより、異なるデータベースシステムやクラウドストレージと直接連携し、SQLクエリを通じてデータを取得できます。

PolyBaseの主な利点

  • ETL不要:外部データソースを直接クエリ可能
  • パフォーマンスの向上:複数の計算ノードを利用した分散処理が可能
  • スケーラビリティ:Hadoopやクラウドストレージと統合し、スケールアウトが容易

対応データソース

  • Hadoop(HDFS、Hive)
  • Azure Data Lake / Azure Blob Storage
  • SQL Server / Oracle / Teradata などのリレーショナルDB
  • CSV, Parquet などのファイル形式

PolyBaseの前提条件

PolyBaseを使用するためには、以下の前提条件を満たしている必要があります:

対応SQL Serverのバージョン

PolyBaseは以下のエディションで利用可能です。

  • SQL Server 2016以降(Enterprise または Standard Edition)
  • SQL Server 2019以降(Big Data Cluster機能も含む)

必要なコンポーネント

PolyBaseを利用するには、SQL Serverのインストール時に以下のコンポーネントを有効化する必要があります。

  • PolyBase Query Service for External Data
  • PolyBase Data Movement Service(SQL Server 2019以降では不要)

インストールされていない場合は、SQL Serverのセットアッププログラムを使用して追加できます。

設定の確認

PolyBaseが有効になっているか確認するには、以下のSQLコマンドを実行します。

SELECT SERVERPROPERTY('IsPolyBaseInstalled') AS IsPolyBaseInstalled;

結果が 1 なら、PolyBaseは有効になっています。0 の場合は、有効化が必要です。

機能の有効化

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'polybase enabled', 1;
RECONFIGURE;

PolyBaseのサービスを起動

Windowsのサービス管理ツール(services.msc)で「SQL Server PolyBase Engine」と「SQL Server PolyBase Data Movement」を開始します。


PolyBaseを使用した外部テーブルの作成

ここでは、PolyBaseを使用してAzure Blob StorageのデータをSQL Server上でクエリできるようにします。

外部データソースの作成

Azure Blob Storageを外部データソースとして登録するには、以下のSQLコマンドを実行します。

CREATE EXTERNAL DATA SOURCE AzureBlobStorage
WITH (
    TYPE = BLOB_STORAGE,
    LOCATION = 'https://<your-storage-account>.blob.core.windows.net',
    CREDENTIAL = AzureBlobCredential
);

※ <your-storage-account> はAzure Storageアカウントの名前に置き換えてください。

外部ファイルフォーマットの作成

次に、外部データのフォーマットを指定します。ここではCSVファイルを想定します。

CREATE EXTERNAL FILE FORMAT CsvFormat
WITH (
    FORMAT_TYPE = DELIMITEDTEXT,
    FORMAT_OPTIONS (
        FIELD_TERMINATOR = ',',
        STRING_DELIMITER = '"',
        FIRST_ROW = 2
    )
);

外部テーブルの作成

Azure Blob Storage上のデータをSQL Serverでクエリできるように、外部テーブルを作成します。

CREATE EXTERNAL TABLE ExternalCustomerData (
    CustomerID INT,
    Name NVARCHAR(100),
    Email NVARCHAR(255),
    Age INT
)
WITH (
    LOCATION = 'customer-data.csv',
    DATA_SOURCE = AzureBlobStorage,
    FILE_FORMAT = CsvFormat
);

外部テーブルのクエリ

外部テーブルを通常のSQL Serverテーブルのようにクエリできます。

SELECT * FROM ExternalCustomerData WHERE Age > 30;

このSQLを実行すると、Azure Blob StorageにあるデータがSQL Serverに取り込まれることなく、直接フィルタリングされます。


PolyBaseのユースケース

PolyBaseは以下のような場面で活用できます。

  1. クラウドデータとの統合(Azure Blob Storage、Azure Data Lakeとの連携)
  2. 異種データベースの統合(Oracle、MongoDB、PostgreSQLのデータをSQL Serverで分析)
  3. ビッグデータ処理の最適化(Hadoopとの統合)

演習問題と解答

演習問題

以下の操作を実施してください。

  1. Azure Blob Storageではなく、SQL Server外部データソース(例: PostgreSQL)を登録するSQLを作成してください。
  2. PostgreSQLの外部テーブルを作成するSQLを記述してください。
  3. 外部テーブルをクエリするSQLを作成してください。

解答例

1.PostgreSQLを外部データソースとして登録
CREATE EXTERNAL DATA SOURCE PostgreSQLServer
WITH (
    LOCATION = 'odbc://your-postgresql-server',
    CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode};Server=your-postgresql-server;Port=5432;',
    CREDENTIAL = PostgreSQLCredential
);
2.PostgreSQLの外部テーブルを作成
CREATE EXTERNAL TABLE ExternalOrders (
    OrderID INT,
    ProductName NVARCHAR(100),
    Quantity INT,
    Price DECIMAL(10,2)
)
WITH (
    DATA_SOURCE = PostgreSQLServer
);
3.外部テーブルをクエリ
SELECT * FROM ExternalOrders WHERE Price > 100;

まとめ

本記事では、SQL ServerのPolyBaseを使用して外部テーブルを作成する方法を解説しました。PolyBaseを活用することで、SQL Server上でさまざまなデータソースと連携し、統合的なデータ分析が可能になります。

PolyBaseを適切に設定し、非構造化データや異種データを活用することで、データ管理の効率を大幅に向上させることができます。