SELECT として外部テーブルを作成する (CETAS)

完了

このユニットでは、CREATE EXTERNAL TABLE AS SELECT (CETAS) コマンドとその利点について詳しく説明します。

CETAS では、Azure Blob Storage、Azure Data Lake Storage、S3 互換オブジェクト ストレージ、および外部データベースがサポートされます。 CETAS では、CSV ファイルまたは Parquet ファイルとしてファイル形式をエクスポートすることもできます。

CETAS の最も強力な機能は、OPENROWSET や他の外部テーブルとの組み合わせなど、他の SELECT 操作と組み合わせることです。 この組み合わせにより、CETAS をさまざまな柔軟な方法で使用できます。

CETAS のユース ケース

CETAS にはさまざまなユース ケースがありますが、3 つの主要なユース ケースは次のとおりです。

  • レポート
  • データの階層化またはオフロード
  • データ エクスポート ハブ

レポート

CETAS の最も明白なユース ケースは、PolyBase と SQL Server の柔軟性のすべての機能を使用してレポートを簡略化することです。 サポートされている任意のデータ ソース、テーブル、またはファイルに接続し、T-SQL を使用して結果を操作およびエクスポートできます。 たとえば、レポート ツールを SQL Server に接続する代わりに、CETAS を使用して必要なすべてのクエリを実行し、結果を Parquet ファイルとしてエクスポートし、レポート ツールをエクスポートされたデータにポイントすることができます。

データの階層化またはオフロード

もう 1 つの一般的なシナリオは、SQL Server テーブルからリモート ストレージにアーカイブまたは読み取り専用データをエクスポートしますが、外部テーブルを介して通常どおりクエリを実行します。 これにより、SQL Server 上のアクティブなデータのみを保持してリソースを節約できますが、必要に応じて透過的な方法でデータにアクセスできます。 アプリケーションの観点からは、通常の SQL Server テーブルにアクセスするのと同じです。

たとえば、 order テーブルに過去 1 年間の履歴データが含まれていますが、それでも完全にアクセスできる必要があるとします。 CETAS は、すべての order テーブル データを別の場所にエクスポートし、データベース サイズと必要なメンテナンス時間を短縮するのに役立ちます。 外部テーブルでは、エクスポートされたデータは通常のテーブルと同じように動作します。

データ エクスポート ハブ

SQL Server 2025 をデータ ハブとして使用すると、Oracle、Teradata、ODBC、その他のバージョンの SQL Server などの他のデータ ソースへの接続を含め、CETAS と既存のすべての PolyBase 機能を組み合わせることができます。

CETAS の要件

SQL Server 2025 で CETAS を使用するには、ALLOW POLYBASE EXPORTを使用してプロパティsp_configureを有効にする必要があります。 詳細については、次の演習を参照してください。

CETAS のアクセス許可

CETAS を使用するには、3 つの異なるレベルのアクセス許可が必要です。

  • データ ソースにアクセスして読み取るアクセス許可。 ネットワーク共有または別のデータベース サーバー上の SQL Server の外部にデータが存在する場合、SQL Server サービス アカウントにはデータ ソースにアクセスするためのアクセス許可が必要です。

  • CETAS コマンドを使用するための SQL Server 2025 のアクセス許可。 データベース ユーザーが CETAS コマンドを実行するには、 BULK OPERATIONS の管理ALTER ANY EXTERNAL DATA SOURCEALTER ANY EXTERNAL FILE FORMAT 権限が必要です。

  • CETAS の結果を書き込むアクセス許可を宛先に書き込みます。 宛先、Parquet、または CSV ファイルに書き込むには、宛先に対する書き込みアクセス許可が必要です。 たとえば、Azure Blob Storage または Azure Data Lake Storage に書き込むには、それらの宛先に対する LISTREADCREATEWRITE のアクセス許可が必要です。

CETAS のアクセス許可の詳細については、「 CREATE EXTERNAL TABLE AS SELECT (CETAS) 権限」を参照してください。

CETAS でサポートされている形式

CETAS は、SELECT コマンドを入力として使用してデータのストリームを受信し、結果を CSV または Parquet 形式でエクスポートします。 入力では、OPENROWSET の結果を含め、SELECT コマンドと同じ形式がサポートされます。

入力には、SQL Server インスタンス上でローカルに実行されているテーブル、OPENROWSET 操作を介してアクセスされるネットワーク ファイル、別のデータベース システム内のテーブル、または Azure Blob Storage、Azure Data Lake Storage、または S3 互換オブジェクト ストレージに格納されている Delta ファイルを指定できます。

  • サポートされている形式の完全な一覧については、「 CREATE EXTERNAL FILE FORMAT」を参照してください。
  • サポートされているデータ ソースの完全な一覧については、「 CREATE EXTERNAL DATA SOURCE」を参照してください。
  • OPENROWSET を使用してリモート ファイルにアクセスする方法については、 OPENROWSET を参照してください。

CETAS T-SQL 構造体

CETAS について理解を深めるために、T-SQL 構文全体を分解できます。 CETAS T-SQL 構造体は、ボトムアップ ロジック アプローチに従います。 ステートメントの最後から始めて、T-SQL ステートメントの先頭に進む方が簡単です。

  • CETAS 構造体の下部には、エクスポートするデータを定義するために使用する SELECT ステートメントが含まれています。
  • 途中には、エクスポートしないデータを拒否するために使用できる省略可能なパラメーターがあります。
  • CETAS ステートメントの先頭で、CREATE EXTERNAL TABLE を宣言した後、宛先の場所、ファイル名、およびファイル形式に関する情報を追加します。

この構造により、CETAS を SELECT ステートメントと組み合わせて、SQL Server の外部、SQL Server 内、またはサポートされている他のデータベースからデータを照会できます。 SQL Server 2025 では、ファイル名が自動的に作成され、最適化のために結果が複数のファイルに分割されます。 たとえば、Parquet としてエクスポートされたテーブルは、エクスポートされたデータ サイズに応じて複数のファイルを生成できます。 select ステートメントは、外部テーブル列の定義と型を定義します。

SQL Server から Parquet としてテーブルをエクスポートする

次の例では、CETAS を使用して SQL Server から Parquet としてテーブルをエクスポートします。

CREATE EXTERNAL TABLE ext_sales
WITH (
      LOCATION = '/cetas',
      DATA_SOURCE = s3_eds,
      FILE_FORMAT = ParquetFileFormat
     ) AS
SELECT *
FROM AdventureWorks2025.[Sales].[SalesOrderDetail];

デルタ ファイルを読み取り、Parquet としてエクスポートする

次の例では、CETAS を使用してデルタ ファイルを読み取り、Parquet としてエクスポートします。

CREATE EXTERNAL TABLE Delta_to_Parquet
WITH (
        LOCATION = N'/backup/sales',
        DATA_SOURCE = s3_parquet,
        FILE_FORMAT = ParquetFileFormat
      ) AS
SELECT *
FROM OPENROWSET(BULK N'/delta/sales_fy22/',
FORMAT = 'DELTA',
DATA_SOURCE = 's3_delta') AS [r];

次の演習では、CETAS を使用して次の作業を行います。

  • テーブルを Parquet としてエクスポートします。
  • コールド データをデータベースからストレージに移動します。
  • 保存されたデータにアクセスするための外部テーブルを作成します。
  • ビュー、ワイルドカード検索、フォルダーの削除、およびメタデータをクエリ戦略として使用します。