専用 SQL プール用の PolyBase データ読み込み戦略を設計する
従来の対称型マルチプロセッシング システム (SMP) データ ウェアハウスでは、データの読み込みに抽出、変換、読み込み (ETL) プロセスを使用します。 Azure SQL プールは、コンピューティング リソースとストレージ リソースのスケーラビリティと柔軟性を活かした超並列処理 (MPP: Massively Parallel Processing) アーキテクチャです。
これに対して、抽出、読み込み、変換 (ELT) プロセスでは、組み込みの分散クエリ処理機能を利用し、読み込みの前にデータを変換するために必要なリソースをなくすことができます。
SQL プールは、一括コピー プログラム (bcp) や SQL BulkCopy API などの PolyBase 以外のオプションを含む多くの読み込み方法をサポートしていますが、データを読み込むための最も高速で、かつ最もスケーラブルな方法は PolyBase の使用です。 PolyBase は、Azure BLOB ストレージまたは Azure Data Lake Storage に格納されている外部データに Transact-SQL (T-SQL) 言語経由でアクセスするテクノロジです。
Polybase ELT を実装する
ELT (抽出、読み込み、変換) とは、データがソース システムから抽出されてデータ ウェアハウスに読み込まれ、その後変換されるプロセスです。
専用 SQL プール用に PolyBase ELT を実装する基本的な手順は次のとおりです。
- ソース データをテキスト ファイルに抽出します。
- データを Azure BLOB ストレージまたは Azure Data Lake Storage に格納します。
- データを読み込み用に準備します。
- PolyBase を使用してデータを専用 SQL プール ステージング テーブルに読み込みます。
- データを変換します。
- データを運用テーブルに挿入します。
読み込みのチュートリアルについては、「ニューヨークのタクシー データセットを読み込む」を参照してください。
詳細については、読み込みパターンと戦略に関するページを参照してください。
ソース データをテキスト ファイルに抽出する
ソース システムからのデータの取得方法は、保存場所によって異なります。 目標は、データを PolyBase でサポートされている区切りテキスト ファイルに移動することです。
PolyBase の外部ファイル形式
PolyBase は、UTF-8 と UTF-16 でエンコードされた区切りテキスト ファイルからデータを読み込みます。 PolyBase では、Hadoop ファイル形式の RC ファイル、ORC、Parquet からも読み込みます。 PolyBase は、Gzip や Snappy の圧縮ファイルからデータを読み込むこともできます。 PolyBase では現在、拡張 ASCII、固定幅形式、または WinZip、JSON、XML などの入れ子になった形式はサポートされていません。
SQL Server からエクスポートする場合は、bcp コマンドライン ツールを使用して、区切りテキスト ファイルにデータをエクスポートすることができます。 次の表は、Azure Synapse Analytics にマップされた Parquet データ型の一覧を示しています。
Parquet データ型 | SQL data type (SQL データ型) |
---|---|
tinyint | tinyint |
smallint | smallint |
int | int |
bigint | bigint |
boolean | bit |
double | float |
float | real |
double | money |
double | smallmoney |
string | nchar |
string | nvarchar |
string | char |
string | varchar |
binary | binary |
binary | varbinary |
timestamp | date |
timestamp | smalldatetime |
timestamp | datetime2 |
timestamp | DATETIME |
timestamp | time |
date | date |
decimal | 小数 |
データを Azure Blob Storage または Azure Data Lake Store に配置する
データを Azure ストレージに格納するには、そのデータを Azure BLOB ストレージまたは Azure Data Lake Storage に移動できます。 どちらの場合も、データはテキスト ファイルに格納されている必要があります。 PolyBase では、どちらの場所からでも読み込みが可能です。
データを Azure Storage に移動するには、次のツールとサービスを使用できます。
- Azure ExpressRoute サービス - ネットワークのスループット、パフォーマンス、予測可能性を向上させます。 ExpressRoute は、専用プライベート接続を通してデータを Azure にルーティングするサービスです。 ExpressRoute 接続では、データはパブリック インターネット経由でルーティングされません。 ExpressRoute 接続は、パブリック インターネットを通る一般的な接続に比べて安全性と信頼性が高く、待機時間も短く、高速です。
- AzCopy ユーティリティ - パブリック インターネットを通してデータを Azure Storage に移動します。 このユーティリティは、データ サイズが 10 TB より小さい場合に機能します。 AzCopy で定期的に読み込みを実行するには、ネットワーク速度をテストして許容範囲かどうかを確認します。
- Azure Data Factory には、ローカル サーバーにインストールできるゲートウェイがあります。 その後、ローカル サーバーから Azure Storage にデータを移動するためのパイプラインを作成できます。 専用 SQL プールで Data Factory を使用するには、Azure Synapse Analytics へのデータの読み込みに関するページを参照してください。
読み込むデータを準備する
専用 SQL プールに読み込む前に、ストレージ アカウント内でデータを準備し、整理する必要がある場合があります。 データの準備は、データがソース内にある間、データをテキスト ファイルにエクスポートするとき、またはデータが Azure ストレージに格納された後に行うことができます。 データの操作は、プロセスの早い段階の方が、最も簡単に行えます。
外部テーブルを定義する
データを読み込む前に、データ ウェアハウスに外部テーブルを定義する必要があります。 PolyBase は、外部テーブルを使用して Azure Storage のデータを定義し、それにアクセスします。 外部テーブルは、データベースのビューに似ています。 外部テーブルは、テーブル スキーマを含んでおり、またデータ ウェアハウスの外部に格納されたデータをポイントします。
外部テーブルを定義するには、データ ソース、テキスト ファイルの形式、テーブル定義を指定する必要があります。 次に示すのは、必要な T-SQL 構文トピックです。
テキスト ファイルの書式設定
外部オブジェクトを定義したら、外部テーブルおよびファイル形式の定義に合わせて、テキスト ファイルの行を配置する必要があります。 テキスト ファイルの各行のデータは、テーブル定義と一致させる必要があります。 テキスト ファイルを書式設定するには、次の処理を行います。
- データが非リレーショナル ソースからのものである場合は、それを行と列に変換する必要があります。 データの読み込み元がリレーショナル ソースの場合も、非リレーショナル ソースの場合も、データを読み込むテーブルの列定義に合わせてデータを変換する必要があります。
- SQL プールの変換先テーブルの列とデータ型に合わせて、テキスト ファイルのデータを書式設定します。 外部テキスト ファイルとデータ ウェアハウス テーブルの間でデータ型の不整合があると、読み込みの際に行が拒否されます。
- テキスト ファイル内のフィールドは終端記号で区切ります。 必ずソース データには含まれていない文字または文字シーケンスを使用してください。 CREATE EXTERNAL FILE FORMAT で指定した終端記号を使用します。
PolyBase を使用して専用 SQL プール ステージング テーブルにデータを読み込みます
データをステージング テーブルに読み込むことをお勧めします。 ステージング テーブルを使用すると、運用環境のテーブルに支障をきたすことなく、エラーを処理することができます。 また、ステージング テーブルを使用すれば、運用テーブルにデータを挿入する前に、SQL プールの組み込みの分散クエリ処理機能を使用してデータを変換できます。
PolyBase を使用してデータを読み込むためのオプション
PolyBase を使用してデータを読み込むには、次のいずれかの読み込みオプションを使用します。
- Microsoft Entra ID を使用して外部データを読み込みます。
- マネージド ID を使用して外部データを読み込みます。
- T-SQL を使用した PolyBase は、データが Azure BLOB ストレージまたは Azure Data Lake Storage に格納されている場合に適切に機能します。 読み込みプロセスを細かく制御できますが、外部データ オブジェクトの定義も必要となります。 その他の方法では、外部データ オブジェクトは、ソース テーブルを移行先テーブルにマップするときにバック グラウンドで定義されます。 T-SQL の読み込みを調整するには、Azure Data Factory、SSIS、または Azure Functions を使用できます。
- SQL Server Integration Services (SSIS) を使用した PolyBase は、ソース データが SQL Server に格納されている場合に適切に機能します。 SSIS では、ソースから宛先へのテーブル マッピングを定義するほか、読み込みの調整も行います。 SSIS パッケージが既にある場合、そのパッケージが移動先の新しいデータ ウェアハウスで機能するように変更できます。
- Azure Data Factory を使用した PolyBase は、もう 1 つのオーケストレーション ツールです。 このツールはパイプラインを定義し、ジョブのスケジュールを設定します。
- Azure Databricks を使用した PolyBase - PolyBase を使用して、Azure Synapse Analytic テーブルから Databricks データ フレームにデータを転送することや、Databricks データ フレームから Azure Synapse Analytics テーブルにデータを書き込むことができます。
PolyBase 以外の読み込みオプション
データが PolyBase と互換性がない場合は、bcp または SQLBulkCopy API を使用できます。 BCP を使用すると、Azure Blob Storage を通さずに専用 SQL プールに直接読み込まれます。また、これは小規模の読み込みのみを対象とします。 これらのオプションの読み込みパフォーマンスは、PolyBase と比べて低速であることに注意してください。
データの変換
データがステージング テーブルにある間に、ワークロードに必要な変換を実行します。 その後、運用環境テーブルにデータを移動します。
運用環境テーブルにデータを挿入する
INSERT INTO ... SELECT
ステートメントでは、データをステージング テーブルから永続的なテーブルに移動します。
ETL プロセスを設計する際は、小規模のテスト サンプルでプロセスを実行してみてください。 テーブルから 1 つのファイルに 1,000 行を抽出し、Azure に移動してから、ステージング テーブルに読み込んでみてください。
パートナー読み込みソリューション
パートナーの多くが読み込みソリューションを提供しています。 詳細については、ソリューション パートナーの一覧をご覧ください。