次の方法で共有


データ仮想化 (プレビュー)

適用対象:✅Microsoft Fabric 内の SQL データベース

Important

この機能は プレビュー段階です

Fabric の SQL データベースのデータ仮想化では、T-SQL を使用して OneLake に格納されている外部データに対してクエリを実行できます。

データ仮想化構文を使用すると、OneLake の一般的なデータ形式でデータを格納するファイルに対して、Transact-SQL (T-SQL) クエリを実行できます。 結合を使用して、このデータをローカルに格納されたリレーショナル データと組み合わせることができます。 データ仮想化を使用すると、元の形式と場所に保ちながら、読み取り専用モードで外部データに透過的にアクセスできます。

構文

Fabric SQL Database では、次のデータ仮想化機能がサポートされています。

Authentication

Fabric Lakehouses への認証では、Microsoft Entra ID パススルー認証が使用されます。

Fabric OneLake からファイルにアクセスするには、ユーザーの ID に Lakehouse とファイルの場所の両方に対するアクセス許可が必要です。

Permissions

ユーザーは、Microsoft Entra ID パススルー経由で適用される OneLake 内のファイルまたはフォルダーへの READ アクセス権を持っている必要があります。

サポートされているファイルの種類

  • Parquet
  • CSV
  • JSON ファイル形式は、クエリですべてのドキュメントを個別の行として返す CSV ファイル形式を指定することで間接的にサポートされます。 JSON_VALUEOPENJSON を使用して、行をさらに解析できます。

サポートされるデータ ソース

現在、ネイティブでサポートされているのは Fabric Lakehouse のみです。 ただし、OneLake ショートカットを使用して、Azure Blob Storage、Azure Data Lake Gen2、Dataverse、Amazon S3、Amazon S3 Compatible、Google Cloud Storage、パブリック HTTPS などのさまざまな外部ソースに拡張できます。

ファブリック ショートカットの詳細については、「 OneLake ショートカットを使用してデータ ソースを統合する」を参照してください。

レイクハウスのABFSSファイルの場所を見つける方法

Fabric Lakehouseのデータソースを作成するには、ワークスペースID、テナント、レイクハウスIDを提供する必要があります。 レイクハウスの ABFSS ファイルの場所を検索するには:

  1. Fabric ポータルに移動します。
  2. Lakehouse に移動してください。
  3. 目的のフォルダーの場所に移動します。
  4. [ ... ]、[ プロパティ] の順に選択します。
  5. ABFSのパスをコピーします。こんな感じです:abfss://<workspace ID>@<Tenant>.dfs.fabric.microsoft.com/<lakehouse ID>/Files/

制限事項

  • CSV 外部テーブルは、スキーマ修飾名 (たとえば、 dbo.Customer_CSV) を使用してクエリを実行する必要があります。
  • BULK INSERT は現在、 OPENROWSET (BULK)と組み合わせて使用する場合にのみサポートされています。

例示

次のサンプル スクリプトでは、Contoso のストアと顧客データを parquet ファイルと csv ファイルでホストする Cold_Lake という名前の Fabric Lakehouse を使用します。

Cold _ Lake という名前のサンプル Lakehouse のスクリーンショット。

A。 OPENROWSET を使用して Parquet ファイルに対してクエリを実行する

次の例では、 OPENROWSET を使用して Parquet ファイルからサンプル データを取得する方法を示します。

SELECT TOP 100 *  
FROM OPENROWSET(  
    BULK 'abfss://<workspace ID>@<tenant>.dfs.fabric.microsoft.com/<lakehouse ID>/Files/Contoso/customer.parquet',  
    FORMAT = 'parquet'  
) AS customer_dataset;  

B: OPENROWSET を使用して CSV ファイルにクエリを実行する

次の例では、 OPENROWSET を使用して CSV ファイルからサンプル データを取得する方法を示します。

SELECT *  
FROM OPENROWSET(  
    BULK 'abfss://<workspace ID>@<tenant>.dfs.fabric.microsoft.com/<lakehouse ID>/Files/Contoso/customer.csv',  
    FORMAT = 'CSV',  
    FIRST_ROW = 2  
) WITH (  
    CustomerKey INT,  
    GeoAreaKey INT,  
    StartDT DATETIME2,  
    EndDT DATETIME2,  
    Continent NVARCHAR(50),  
    Gender NVARCHAR(10),  
    Title NVARCHAR(10),  
    GivenName NVARCHAR(100),  
    MiddleInitial VARCHAR(2),  
    Surname NVARCHAR(100),  
    StreetAddress NVARCHAR(200),  
    City NVARCHAR(100),  
    State NVARCHAR(100),  
    StateFull NVARCHAR(100),  
    ZipCode NVARCHAR(20),  
    Country_Region NCHAR(2),  
    Country_Region_Full NVARCHAR(100),  
    Birthday DATETIME2,  
    Age INT,  
    Occupation NVARCHAR(100),  
    Company NVARCHAR(100),  
    Vehicle NVARCHAR(100),  
    Latitude DECIMAL(10,6),  
    Longitude DECIMAL(10,6)  
) AS customer_dataset; 

C. 外部データ ソースを作成する

次の例では、外部データ ソースを作成して、 OPENROWSETなどの外部テーブルとコマンドを簡略化する方法を示します。

CREATE EXTERNAL DATA SOURCE [Cold_Lake] 
WITH ( 
LOCATION = 'abfss://<workspace ID>@<tenant>.dfs.fabric.microsoft.com/<lakehouse ID>/Files/'); 

外部データ ソースを作成すると、 OPENROWSETを簡略化できます。次に例を示します。

-- USING DATA SOURCE WITH OPENROWSET 
SELECT TOP 100 * FROM OPENROWSET 
(BULK '/customer.parquet' 
, FORMAT = 'parquet' 
, DATA_SOURCE = 'Cold_Lake' ) 
 AS Customer_dataset; 
-- USING DATA SOURCE WITH OPENROWSET 
SELECT TOP 100 *  
FROM OPENROWSET(  
    BULK '/customer.csv',  
    FORMAT = 'CSV',  
    DATA_SOURCE = 'Cold_Lake', 
    FIRST_ROW = 2  
) WITH (  
    CustomerKey INT,  
    GeoAreaKey INT,  
    StartDT DATETIME2,  
    EndDT DATETIME2,  
    Continent NVARCHAR(50),  
    Gender NVARCHAR(10),  
    Title NVARCHAR(10),  
    GivenName NVARCHAR(100),  
    MiddleInitial VARCHAR(2),  
    Surname NVARCHAR(100),  
    StreetAddress NVARCHAR(200),  
    City NVARCHAR(100),  
    State NVARCHAR(100),  
    StateFull NVARCHAR(100),  
    ZipCode NVARCHAR(20),  
    Country_Region NCHAR(2),  
    Country_Region_Full NVARCHAR(100),  
    Birthday DATETIME2,  
    Age INT,  
    Occupation NVARCHAR(100),  
    Company NVARCHAR(100),  
    Vehicle NVARCHAR(100),  
    Latitude DECIMAL(10,6),  
    Longitude DECIMAL(10,6)  
) AS customer_dataset; 

D: Parquet 用の外部テーブルを作成する

次の例では、外部ファイル形式を設定し、Parquet データ専用の外部テーブルを作成する方法を示します。

CREATE EXTERNAL FILE FORMAT Parquetff WITH (FORMAT_TYPE=PARQUET); 

CREATE EXTERNAL TABLE [ext_product]( 
    [ProductKey] [int] NULL, 
    [ProductCode] [nvarchar](255) NULL, 
    [ProductName] [nvarchar](500) NULL, 
    [Manufacturer] [nvarchar](50) NULL, 
    [Brand] [nvarchar](50) NULL, 
    [Color] [nvarchar](20) NULL, 
    [WeightUnit] [nvarchar](20) NULL, 
    [Weight] DECIMAL(20, 5) NULL, 
    [Cost] DECIMAL(20, 5) NULL, 
    [Price] DECIMAL(20, 5) NULL, 
    [CategoryKey] [int] NULL, 
    [CategoryName] [nvarchar](30) NULL, 
    [SubCategoryKey] [int] NULL, 
    [SubCategoryName] [nvarchar](50) NULL) 
WITH 
(LOCATION = '/product.parquet' 
,DATA_SOURCE = [Cold_Lake] 
,FILE_FORMAT = Parquetff); 
 
SELECT * FROM [dbo].[ext_product] 

E. CSV 用の外部テーブルを作成する

次の例では、外部ファイル形式を設定し、CSV データ専用の外部テーブルを作成する方法を示します。

CREATE EXTERNAL FILE FORMAT [CSVFileFormat]  
WITH (  
    FORMAT_TYPE = DELIMITEDTEXT,  
    FORMAT_OPTIONS (  
        FIELD_TERMINATOR = ',',  
        FIRST_ROW = 2  
    )  
); 
 
CREATE EXTERNAL TABLE ext_customer_csv ( 
    CustomerKey INT NOT NULL,  
    GeoAreaKey INT NOT NULL,  
    StartDT DATETIME2 NOT NULL, 
    EndDT DATETIME2 NOT NULL, 
    Continent VARCHAR(50) NOT NULL, 
    Gender VARCHAR(10) NOT NULL, 
    Title VARCHAR(10) NOT NULL,  
    GivenName VARCHAR(100) NOT NULL,  
    MiddleInitial VARCHAR(2) NOT NULL,  
    Surname VARCHAR(100) NOT NULL, 
    StreetAddress VARCHAR(200) NOT NULL, 
    City VARCHAR(100) NOT NULL, 
    State VARCHAR(100) NOT NULL, 
    StateFull VARCHAR(100) NOT NULL, 
    ZipCode VARCHAR(20) NOT NULL,  
    Country_Region CHAR(2) NOT NULL 
    ) 
WITH (  
LOCATION = '/customer.csv' 
, DATA_SOURCE = Cold_Lake 
, FILE_FORMAT = CSVFileFormat 
); 

SELECT * FROM [dbo].[ext_customer_csv]; 

F. OPENROWSET を使用してデータを取り込む

次の例は、 OPENROWSET を使用して新しいテーブルにデータを取り込む方法を示しています。

SELECT * 
INTO tb_store 
FROM OPENROWSET 
(BULK 'abfss://<workspace ID>@<tenant>.dfs.fabric.microsoft.com/<lakehouse ID>/Files/Contoso/store.parquet' 
, FORMAT = 'parquet' )
 AS STORE;

既存のテーブルの場合、 INSERT INTO を使用して、 OPENROWSETからテーブルを設定できます。

INSERT INTO tb_store  
SELECT TOP 100 * FROM OPENROWSET 
(BULK ' abfss://<workspace ID>@<tenant>.dfs.fabric.microsoft.com/<lakehouse ID>/Files/contoso/store.parquet' 
, FORMAT = 'parquet' ) 
 AS STORE; 

G. メタデータ関数を使用 - sp_describe_first_result_set

関数 sp_describe_first_result_setOPENROWSET (BULK) と組み合わせて使用して、外部ファイル スキーマを推定できます。 CREATE TABLEステートメントまたはCREATE EXTERNAL TABLE ステートメントのスキーマを識別し、さらにデータを探索できます。

sp_describe_first_result_set関数は、データのサンプルを使用してスキーマを推定します。 サンプルが代表的でない場合は、不正確な結果が得られます。 スキーマが既にわかっている場合は、 WITH 句を使用して指定します。

EXEC sp_describe_first_result_set N'  
   SELECT * FROM OPENROWSET(  
      BULK ''abfss://<workspace ID>@<tenant>.dfs.fabric.microsoft.com/<lakehouse ID>/Files/Contoso/store.parquet'',  
      FORMAT = ''parquet''  
   ) AS DATA'; 

詳細については、 sp_describe_first_result_set()を参照してください。

H. メタデータ関数を使用する - filename() と filepath()

Fabric SQL データベースでは、フォルダーとファイルの探索に使用できる filename() 関数と filepath() 関数、動的クエリ作成も可能です。動的クエリ作成は、複数のサブフォルダー間のデータ ファイルに対して OPENROWSET と組み合わせて仮想列に使用することもできます。

次の例では、すべての Parquet ファイルとその場所を一覧表示します。

SELECT 
  r.filename() as file_name
, r.filepath() as full_path 
FROM OPENROWSET
   (BULK 'abfss://<workspace ID>@<tenant>.dfs.fabric.microsoft.com/<lakehouse ID>/Files/*/*.parquet',  
    FORMAT = 'parquet'  
   ) AS r 
GROUP BY r.filename(), r.filepath() 
ORDER BY file_name;  

詳細については、 filename()filepath()を参照してください。