近年、企業が扱うデータはますます多様化し、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は以下のような場面で活用できます。
- クラウドデータとの統合(Azure Blob Storage、Azure Data Lakeとの連携)
- 異種データベースの統合(Oracle、MongoDB、PostgreSQLのデータをSQL Serverで分析)
- ビッグデータ処理の最適化(Hadoopとの統合)
演習問題と解答
演習問題
以下の操作を実施してください。
- Azure Blob Storageではなく、SQL Server外部データソース(例: PostgreSQL)を登録するSQLを作成してください。
- PostgreSQLの外部テーブルを作成するSQLを記述してください。
- 外部テーブルをクエリする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を適切に設定し、非構造化データや異種データを活用することで、データ管理の効率を大幅に向上させることができます。