適用対象:✅ Microsoft Fabric のウェアハウス
Transact-SQL 言語には、レイクハウスとウェアハウス内の既存のテーブルからウェアハウス内の新しいテーブルに大規模なデータを読み込む際に使用できるオプションが用意されています。 これらのオプションは、新しい集計データを含むテーブルのバージョン、行のサブセットを含むテーブルのバージョンを作成する、または複雑なクエリの結果としてテーブルを作成する必要がある場合に便利です。 いくつかの例を見てみましょう。
T-SQL の取り込みステートメントを選択してください
T-SQL言語は、ウェアハウス内のデータを取り込み変換するために使用できる豊富なステートメント群を提供します。 新しいテーブルや既存のテーブルへのデータロード、新しい行の追加、インジェスト中のデータの変換、既存データとの同期などが可能です。 Microsoft FabricのWarehouseは以下のT-SQLインジェスション文をサポートしています:
-
CREATE TABLE AS SELECT(CTAS) ステートメントを使用すると、SELECTステートメントの出力からウェアハウスに新しいテーブルを作成できます。 -
SELECT INTOクエリ句を使用すると、任意のテーブル ソースから結果を選択し、結果を新しいテーブルにリダイレクトできます。 これは、T-SQL 言語の標準機能です。 -
INSERT ... SELECTクエリ結果を宛先テーブルに追加します。 新しいバッチやインクリメンタル部分集合を、スキーマを管理しているテーブルに読み込みたいときにこのステートメントを使います。 -
MERGEソース行とターゲット行を比較し、条件に応じてターゲット行を挿入、更新、または削除します。 新しい行や変更された行を同期したり、宛先と完全なソーススナップショットを照合したりする必要がある場合に、このステートメントを使います。
宛先テーブルが既に存在しているか、またデータを作成、追加、同期するかに基づいて、ステートメントを選択します。 各文のソースはT-SQLクエリです。 対応可能な式、関数、フィルター、結合、集約を使って、取り込み時にデータを形作ることができます。 T-SQL 文でデータを読み取るために、以下のデータ ソースを使用できます:
- ウェアハウス テーブルの読み取り (ステージング テーブルなど)。
- Lakehouse の SQL 分析エンドポイントで自動生成されたテーブルを使用して、Lakehouse Delta Lake フォルダーを読み取ります。
-
OPENROWSET関数を使用して、Azure Data Lake または Azure Blob Storage から CSV、Parquet、または JSONL ファイルを直接読み取ります。
CTASを使ってテーブルを作成します
CTASは宛先テーブルを作成し、クエリ結果を一度の操作で読み込みます。
最初の例では、既存の dbo.TaxiTrips テーブルのコピーである新しいテーブルを作成し、2023 年のデータのみを含むようにフィルター処理する方法を示します。
CREATE TABLE dbo.TaxiTrips_2023
AS
SELECT *
FROM dbo.TaxiTrips
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';
CTASを使ってクエリ結果から新しいテーブルを作成し、データを格納してください。 この方法は、宛先テーブルが存在しない場合や、1つ以上のソースから変換または結合されたデータをマテリアル化したい場合に有効です。
SELECT INTOを使ってテーブルを作成します
SELECT ... INTO クエリ結果から宛先テーブルも作成します:
SELECT *
INTO dbo.TaxiTrips_2023
FROM MyLakehouse.dbo.TaxiTrips
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';
CTAS と SELECT ... INTO はどちらもクエリ結果から宛先列を導出します。 変換先が特定のデータ型、精度、長さを必要とする場合に明示的に式をキャストします。
INSERT ...SELECTを使ってデータを追加してください
INSERT ... SELECT クエリ結果を既存のテーブルに読み込みます。
外部の公開されているParquetファイルからデータを変換することで、テーブルにデータを付加できます:
INSERT INTO dbo.<table name>
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>.parquet') AS data;
MERGEを使ってデータを同期します
MERGE は安定キーでソースと宛先の行をマッチングします。 以下のパターンは、dbo.DimCustomer がすでに存在し、その文で使われる列を備えていることを前提としています。 送信元が各宛先キーに対して最大1行のみ返すようにしてください。
MERGE dbo.DimCustomer AS target
USING staging.Customers AS source
ON target.CustomerID = source.CustomerID
WHEN MATCHED AND source.ModifiedDate > target.ModifiedDate THEN
UPDATE SET CustomerName = source.CustomerName, City = source.City,
ModifiedDate = source.ModifiedDate
WHEN NOT MATCHED BY TARGET THEN
INSERT (CustomerID, CustomerName, City, ModifiedDate)
VALUES (source.CustomerID, source.CustomerName, source.City, source.ModifiedDate);
WHEN NOT MATCHED BY SOURCE THEN DELETEは、ソースクエリがスコープ内の行の完全な権威あるデータセットを表す場合にのみ使用してください。 インクリメンタルソースバッチにはその節を使わないでください。バッチに含まれていない宛先行は削除される可能性があります。
[データ ソースを選ぶ]
インジェスステートメントはサポートされているソースタイプ間で一貫して動作します。 変わるのはソースの参照だけです。
レイク内のファイル
OneLake、Azure Data Lake Storage、Azure Blob StorageのParquet、CSV、JSONLファイルを読み取るためにOPENROWSETを使います。 1つのファイル、ワイルドカードで複数のファイルをターゲットにする、またはパーティション分けされたフォルダをターゲットにすることができます。
ファイル パス、スキーマ推論、パーティション フィルター処理、メタデータ関数、そして 4 つの取り込みステートメントの例については、「OPENROWSET と T-SQL によるデータ レイク内のデータの取り込みと変換」を参照してください。
レイクハウスのデルタテーブル
レイクハウスのSQL分析エンドポイントは、その /Tables 領域にDeltaテーブルを公開します。 同じワークスペース内の倉庫から、3 部構成名 <lakehouse>.<schema>.<table>を使ってテーブルを参照します。
これはレイクハウスに物理的に保管されているデルタテーブルに限った話ではありません。 OneLakeショートカットを通じて /Tables 領域に公開されたテーブルは、レイクハウス /Files エリア、ADLSやAmazon S3などの外部ストレージ、ミラーデータ、他のワークスペース内のOneLakeデータなど、他の場所に保存されているデータを参照することもできます。
このアーキテクチャを使うことで、ショートカットバックされたデータをレイクハウスのSQL分析エンドポイントを通じてクエリし、データをレイクハウスにコピーせずにクエリできます。
テーブル作成、インクリメンタル ロード、同期の例については、T-SQL を使用した Delta Lake テーブルの取り込みを参照してください。
現在のウェアハウスのテーブル
<schema>.<table>のような二部構成の名前を使って、現在のウェアハウスのテーブルからデータを取り込みます。
ブロンズからシルバー、ゴールドへと1つのウェアハウス内でテーブルを結合・集約・段階的に読み込む例については、「 T-SQLによるウェアハウステーブルおよびミラードデータベースからの取り込み」を参照してください。
ミラーされたデータベースおよびその他のワークスペース項目
ミラーされたデータベース、別のウェアハウス、または同じワークスペース内の他のサポートされているアイテムからデータを取り込むには、そのアイテムをエクスプローラーに追加し、3つの部分からなる名前 <item>.<schema>.<table>を使用します。
クロスウェアハウス クエリの詳細については、「クロスデータベース SQL クエリの記述」を参照してください。
両方の命名パターンを用いた例については、 T-SQLによる「倉庫テーブルおよびミラードデータベースからの取り込み」を参照してください。
T-SQL インジェストの監査と監視
CTAS、 SELECT ... INTO、 INSERT ... SELECT、 MERGE 操作は 倉庫のクエリ履歴/アクティビティに表示されます。
クエリインサイトを使って実行の詳細を確認し、取り込みクエリのトラブルシューティングを行いましょう。
データ インジェスト オプション
読み込みにフィルタリング、型変換、結合、計算、集計、同期が含まれる場合は、T-SQLインジェスションを使用してください。 次の場合は別のオプションを選択してください: データをデータウェアハウスに取り込む他の方法には、次のものがあります: