データ倉庫にデータを取り込む

適用対象:✅ Microsoft Fabric のウェアハウス

Microsoft Fabric内のウェアハウスには、組み込みのデータ インジェスト ツールが用意されています。 これらのツールを使用して、コードフリーまたはコード豊富なエクスペリエンスを使用して、大規模なデータをウェアハウスに取り込みます。

データ インジェスト ツールを選択する

次の条件に基づいてデータ インジェスト オプションを選択します。

  • コード豊富なデータ インジェスト操作には、COPY (Transact-SQL) ステートメントを使用します。 データ インジェストのスループットが最も高くなります。 Transact-SQL ロジックの一部としてデータ インジェストを追加する必要がある場合に使用します。
    • 開始するには、 COPY ステートメントを使用してデータを取り込む方法に関する説明を参照してください。
    • Warehouse では、互換性のために従来の BULK INSERT ステートメントもサポートされています。 Fabric Data Warehouse では、このステートメントは、従来の読み込みオプションを使用した場合の COPY INTO の動作に対応します。
    • Warehouse の COPY ステートメントでは、Azure ストレージ アカウントと OneLake lakehouse フォルダーからのデータ ソースがサポートされています。
    • CREDENTIAL節でWorkspace Identityを指定し、ソースにアクセスする際にFabricワークスペースのアイデンティティを模倣します。 たとえば、「 CREDENTIAL = (IDENTITY = 'Workspace Identity') 」のように入力します。 文は現在のユーザーのSQLセキュリティコンテキスト内で実行され続けます。
  • データがアプリケーション層にあり、最初にファイルをステージングできない場合は、BCP API (プレビュー) を使用してクライアント側の直接インジェストを行います。
    • 開始するには、「 BCP API を使用したデータの取り込み (プレビュー)」を参照してください。
    • BCP API では、C# SqlBulkCopyやJava SQLServerBulkCopyなどの bcp.exe スクリプトとアプリケーション API がサポートされます。
    • 最高スループットのファイル ベースのインジェストでは、ステージングが可能な場合は常に COPY INTO を優先します。
  • 繰り返し、スケジュールに従って実行される、または大量のデータを含む、コード不要または低コードの堅牢なデータ インジェスト ワークフローに パイプライン を使用します。
    • 開始するには、「パイプラインを 使用してウェアハウスにデータを取り込む」を参照してください。
    • パイプラインを使用すると、完全な抽出、変換、読み込み (ETL) エクスペリエンスの堅牢なワークフローを調整できます。 このエクスペリエンスには、移行先環境の準備、カスタム Transact-SQL ステートメントの実行、参照の実行、ソースからコピー先へのデータのコピーに役立つアクティビティが含まれます。
  • データフローは、インジェスト前にソース データに対するカスタム変換を可能にする、コード不要のエクスペリエンスに使用します。
  • コードが豊富なエクスペリエンスに T-SQL インジェスト を使用して、新しいテーブルを作成したり、同じワークスペースまたは外部ストレージ内のソース データを使用して既存のテーブルを更新したりします。
    • 開始するには、 Transact-SQL を使用してウェアハウスにデータを取り込む方法に関する説明を参照してください。
    • INSERT...SELECTSELECT INTOCREATE TABLE AS SELECT (CTAS) などの Transact-SQL 機能を使用して、同じワークスペース内の他のウェアハウス、レイクハウス、ミラー化されたデータベースを参照するテーブルからデータを読み取ります。 これらの機能を使用して、外部Azureストレージ アカウント内のファイルを参照する OPENROWSET 関数からデータを読み取ることもできます。
    • Fabric ワークスペース内の異なるウェアハウス間でクロスデータベースクエリを書き込むこともできます。

サポートされるデータ形式とソース

Microsoft Fabricでの Warehouse のデータ インジェストでは、多くのデータ形式とソースがサポートされています。 この記事で説明する各オプションには、サポートされているデータ コネクタの種類とデータ形式の独自の一覧が含まれています。

T-SQL インジェストの場合、テーブル データ ソースは同じMicrosoft Fabric ワークスペース内にあり、ファイル データ ソースは Azure Data Lake または Azure Blob Storage 内にある必要があります。 ソース データの 3 部構成の名前付けまたは OPENROWSET 関数を使用して、データのクエリを実行できます。 テーブル データ ソースは Delta Lake データ セットを参照できますが、OPENROWSET では、Azure Data Lakeまたは Azure Blob Storage 内の Parquet、CSV、または JSONL ファイルを参照できます。

たとえば、ワークスペースに InventorySales という名前の 2 つのウェアハウスがあるとします。 次のようなクエリでは、 Inventory ウェアハウスに新しいテーブルが作成され、 Inventory ウェアハウス内のテーブルの内容が、 Sales ウェアハウス内のテーブルと結合され、外部ファイルに顧客情報が含まれます。

CREATE TABLE Inventory.dbo.RegionalSalesOrders
AS
SELECT 
    s.SalesOrders,
    i.ProductName,
    c.CustomerName
FROM Sales.dbo.SalesOrders s
JOIN Inventory.dbo.Products i
    ON s.ProductID = i.ProductID
JOIN OPENROWSET( BULK 'abfss://<container>@<storage>.dfs.core.windows.net/<customer-file>.csv' ) AS c
    ON s.CustomerID = c.CustomerID
WHERE s.Region = 'West region';

Note

OPENROWSETを使用したデータの読み取りは、テーブルからデータを照会するよりも遅くなる可能性があります。 同じ外部データに繰り返しアクセスする場合は、専用テーブルに取り込んでパフォーマンスとクエリの効率を向上することを検討してください。

COPY(Transact-SQL)文はCSV、JSONL、PARQUETのファイル形式をサポートします。 サポートされているデータソースには、Azure Data Lake Storage (ADLS) Gen2、Azure Blob Storage、そしてOneLakeが含まれます。

直接クライアント側のインジェスト シナリオの場合、BCP API (プレビュー) では、ステージング ファイルを先に使用せずに SQL 接続経由で bcp.exe、C# SqlBulkCopy、Java SQLServerBulkCopyなどのツールと API がサポートされます。

パイプラインデータフローでは、 さまざまなデータ ソースとデータ形式がサポートされています。 詳細については、「パイプラインとデータフローを参照してください。

ワークスペースアイデンティティとCOPY INTOを使います

Workspace IdentityCOPY INTOで使い、ソースデータへのアクセスとターゲットウェアハウステーブルへの書き込み権限を分けてください。 Workspace IdentityはAzure Blob Storage、ADLS Gen2、OneLakeのソースでサポートされています。 文は現在のユーザーのSQLセキュリティコンテキスト内で実行されます。 WITH (CREDENTIAL = (IDENTITY = 'Workspace Identity'))条項は、COPY INTOがソースにアクセスする場合にのみワークスペースのアイデンティティをなりすますことを認めています。 すべてのSQL権限と監査の帰属は実行中のユーザーに紐づけられます。

Workspace Identityがなければ、アイテム共有を通じてウェアハウスへのアクセスを受けたユーザーは、少なくともアイテムの読み取り権限と必要なSQL権限で COPY INTO 実行できます。

Workspace Identityで COPY INTO を実行する前に、以下のセットアップを完了してください:

  1. ターゲットウェアハウスを含むワークスペースのアイデンティティを設定してください。
  2. ワークスペースのアイデンティティにソースへのアクセス権を付与します:
    • Azure Blob StorageおよびADLS Gen2の場合、ワークスペース名でワークスペースの識別子を見つけ、ストレージアカウントまたはコンテナにStorage Blobデータリーダーの役割を割り当てます。 ADLS Gen2のディレクトリレベルアクセスには、必要なACL権限を付与します。 ワークスペースのアイデンティティには、Microsoft Entraユーザーと同様に権限を割り当ててください。
    • OneLakeの場合は、ワークスペース名でワークスペースのアイデンティティを見つけ、ソースデータを含むワークスペースに追加し、少なくともContributorワークスペースの役割を割り当てます。
  3. 実行中のユーザーに、ターゲットウェアハウスを含むワークスペース上で少なくともビューワーロールを割り当てます。 アイテム権限だけではユーザーがワークスペースのアイデンティティをなりすますことはできません。 ワークスペース-ロールの要件は、ユーザーがワークスペースIDを指定する場合にのみ適用されます。
  4. 実行中のユーザーにターゲットテーブルの権限 INSERT 付与します。 Workspace Identityが認証情報の場合、 ADMINISTER DATABASE BULK OPERATIONS 権限は不要です。

以下の例は、SourceアクセスのためにWorkspace Identityを模倣してOneLakeからCSVファイルを読み込みます。

COPY INTO dbo.SalesOrders
FROM 'https://onelake.dfs.fabric.microsoft.com/<workspace-id>/<item-id>/Files/orders/*.csv'
WITH (
    FILE_TYPE = 'CSV',
    FIRSTROW = 2,
    CREDENTIAL = (IDENTITY = 'Workspace Identity')
);

Important

感度ラベルの方針は組織によって異なります。 COPY INTO 対象先に操作を妨げる制限付きの感度ラベルがある場合に失敗することがあります。 もしセンシティブラベルが失敗の原因であれば、コマンドをやり直す前にそのラベルを宛先から削除してください。

ベスト プラクティス

Warehouse in Microsoft FabricのCOPYコマンドは、Azure StorageおよびOneLakeからのSQLワークロードに対して高スループットのデータ取り込みのためのシンプルで柔軟かつ高速なインターフェースを提供します。

T-SQL 言語を使用して新しいテーブルを作成し、そのテーブルに挿入してから、データ行を更新および削除することもできます。 データベース間クエリを使用して、Microsoft Fabric ワークスペース内の任意のデータベースからデータを挿入できます。 レイクハウスからウェアハウスにデータを取り込む場合は、クロス データベース クエリを使用してこれを行えます。 例えば次が挙げられます。

INSERT INTO MyWarehouseTable
SELECT * FROM MyLakehouse.dbo.MyLakehouseTable;
  • シングルトン INSERT ステートメントを使用してデータを取り込むのを避けます。この方法では、クエリと更新のパフォーマンスが低下するためです。 データ インジェストにシングルトン INSERT ステートメントを連続して使用する場合は、 CREATE TABLE AS SELECT (CTAS) または INSERT...SELECT パターンを使用して新しいテーブルを作成し、元のテーブルを削除してから、 CREATE TABLE AS SELECT (CTAS)を使用して作成したテーブルからテーブルを再度作成します。
    • 既存のテーブルを削除すると、例えばセマンティック モデルに対して行ったカスタムメジャーの追加やその他のカスタマイズなど、セマンティックモデル全体が影響を受けます。
  • ファイルで外部データを操作する場合は、ファイルのサイズが 4 MB 以上であることを確認します。
  • 大きな圧縮 CSV ファイルの場合は、ファイルを複数のファイルに分割することを検討してください。
  • Azure Data Lake Storage (ADLS) Gen2 では、Azure Blob Storage (レガシ) よりも優れたパフォーマンスが提供されます。 可能な限り、ADLS Gen2 アカウントの使用を検討してください。
  • 頻繁に実行されるパイプラインについては、同じファイルに同時にアクセスできる他のサービスから Azure ストレージ アカウントを分離することを検討してください。
  • 明示的なトランザクションを使用して、複数のデータ変更をグループ化して、トランザクションが完全にコミットされたときに 1 つ以上のテーブルを読み取るときにのみ表示されるようにすることができます。 また、いずれかの変更が失敗した場合にトランザクションをロールバックすることもできます。
  • SELECTがトランザクション内にあり、その前にデータが挿入された場合、ロールバック後に自動的に生成される統計が不正確になる可能性があります。 統計が不正確な場合、最適化されていないクエリ プランと実行時間につながる可能性があります。 大きなSELECTの後にINSERTを使用してトランザクションをロールバックする場合は、に記載されている列のSELECTします。

Note

データをウェアハウスに取り込む方法に関係なく、データ インジェスト タスクは、V オーダー書き込み最適化を使用して生成される Parquet ファイルを最適化します。 V オーダーは、Parquet ファイルを最適化し、Power BI、SQL、Spark などの Microsoft Fabric コンピューティング エンジンでの高速読み取りを可能にします。 一般に、ウェアハウス クエリは、この最適化を使用してクエリの読み取り時間を短縮すると同時に、Parquet ファイルがオープンソース仕様に準拠% 100 であることを保証します。 読み取りパフォーマンスに影響する可能性があるため、V オーダーを無効にしないでください。 V オーダーの詳細については、「ウェアハウスの V オーダーの管理と管理」を参照してください。

Fabric Data Warehouseのデータ インジェストについてよく寄せられる質問

圧縮されている CSV ファイルを読み込む COPY コマンドに関するファイルの分割ガイダンスについて教えてください。

特にファイルの数が少ない場合は、大きな CSV ファイルを分割することを検討してください。ただし、パフォーマンスを向上させるために、ファイルはそれぞれ 4 MB 以上にしてください。

Parquet ファイルを読み込む COPY コマンドに関するファイルの分割ガイダンスについて教えてください。

特にファイルの数が少ない場合は、大きな Parquet ファイルを分割することを検討してください。

ファイルの数やサイズに制限はありますか?

ファイルの数やサイズに制限はありません。 ただし、パフォーマンスを最大限に高めるには、4 MB 以上のファイルを使用してください。

もし指定しない場合、COPYコマンドはどの認証情報を使いますか?

デフォルトでは、COPY INTO実行中のユーザーのMicrosoft Entraアイデンティティをソースアクセスに使用します。