Condividi tramite


Virtualizzazione dei dati (anteprima)

si applica a:database SQL in Microsoft Fabric

Importante

Questa funzionalità si trova in Anteprima.

La virtualizzazione dei dati nel database SQL in Fabric consente di eseguire query su dati esterni archiviati in OneLake usando T-SQL.

Con la sintassi di virtualizzazione dei dati, è possibile eseguire query Transact-SQL (T-SQL) su file che archiviano dati in formati di dati comuni in OneLake. È possibile combinare questi dati con dati relazionali archiviati in locale usando join. Con la virtualizzazione dei dati, è possibile accedere in modo trasparente ai dati esterni in modalità di sola lettura, mantenendolo nel formato e nella posizione originali.

Sintassi

Il database SQL di Infrastruttura supporta le funzionalità di virtualizzazione dei dati seguenti:

Authentication

L'autenticazione a Fabric Lakehouses usa l'autenticazione pass-through dell'ID Entra di Microsoft.

L'accesso ai file da Fabric OneLake richiede che l'utente abbia le autorizzazioni sia per il lakehouse che per l'ubicazione del file.

Permissions

Gli utenti devono avere accesso in lettura al file o alla cartella in OneLake, applicato attraverso il pass-through di Microsoft Entra ID.

Tipi di file supportati

  • Parquet
  • CSV
  • Il formato di file JSON è supportato indirettamente specificando il formato di file CSV in cui le query restituiscono ogni documento come riga separata. È possibile analizzare ulteriormente le righe usando JSON_VALUE e OPENJSON.

Origini dati supportate

Solo Fabric Lakehouse è attualmente supportato in modo nativo. Tuttavia, le scorciatoie di OneLake possono essere usate per connettersi a varie origini esterne, ad esempio Archiviazione BLOB di Azure, Azure Data Lake Gen2, Dataverse, Amazon S3, servizi compatibili con Amazon S3, Google Cloud Storage, HTTPS pubblico e altro ancora.

Per ulteriori informazioni su Fabric Shortcuts, vedere Unify data sources with OneLake shortcuts.

Come trovare il percorso del file ABFSS di una lakehouse

Per creare una sorgente dati Fabric Lakehouse, devi fornire l'ID del workspace, il tenant e l'ID del lakehouse. Per trovare il percorso del file ABFSS di una lakehouse:

  1. Vai al portale Fabric.
  2. Vai al tuo Lakehouse.
  3. Spostarsi nel percorso della cartella desiderata.
  4. Selezionare ... e quindi Proprietà.
  5. Copia il percorso ABFS, che appare più o meno così: abfss://<workspace ID>@<Tenant>.dfs.fabric.microsoft.com/<lakehouse ID>/Files/.

Limitazioni

  • Le tabelle esterne CSV devono essere sottoposte a query usando nomi qualificati dallo schema, dbo.Customer_CSVad esempio .
  • BULK INSERT è attualmente supportato solo se usato in combinazione con OPENROWSET (BULK).

Esempi

Gli script di esempio seguenti usano un'istanza di Fabric Lakehouse denominata Cold_Lake che ospita i dati dei negozi e dei clienti di Contoso in file parquet e CSV.

Schermata dell'esempio Lakehouse chiamato Cold _ Lake.

A. Eseguire una query su un file parquet con OPENROWSET

Nell'esempio seguente viene illustrato l'uso di OPENROWSET per recuperare i dati di esempio da un file 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. Interrogare un file CSV con OPENROWSET

L'esempio seguente illustra l'uso di OPENROWSET per recuperare i dati di esempio da un file 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. Creare un'origine dati esterna

L'esempio seguente illustra come creare un'origine dati esterna per semplificare tabelle e comandi esterni come OPENROWSET:

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

Con un'origine dati esterna creata, è possibile semplificare OPENROWSET, ad esempio:

-- 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. Creare una tabella esterna per parquet

L'esempio seguente illustra come configurare un formato di file esterno, quindi creare una tabella esterna specificamente per i dati 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. Creare una tabella esterna per CSV

L'esempio seguente illustra come configurare un formato di file esterno e creare una tabella esterna specificamente per i dati 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. Inserire dati con OPENROWSET

L'esempio seguente illustra come OPENROWSET usare per inserire dati in una nuova tabella:

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;

Per una tabella esistente, INSERT INTO è possibile usare per popolare la tabella da 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. Utilizzare le funzioni di metadati - sp_describe_first_result_set

La funzione sp_describe_first_result_set può essere usata in combinazione con OPENROWSET (BULK) per stimare lo schema di file esterno. È possibile identificare lo schema per le istruzioni CREATE TABLE o le istruzioni CREATE EXTERNAL TABLE e per l'ulteriore esplorazione dei dati.

La sp_describe_first_result_set funzione usa un esempio di dati per stimare lo schema. Se l'esempio non è rappresentativo, può fornire risultati imprecisi. Se lo schema è già noto, specificarlo tramite WITH clausola .

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'; 

Per altre informazioni, vedere sp_describe_first_result_set().

H. Usare le funzioni di metadati - filename() e filepath()

Il database SQL di Fabric rende disponibili filename() e filepath() funzioni per l'esplorazione di cartelle e file e la creazione dinamica di query, che possono essere usate anche per le colonne virtuali, in combinazione con OPENROWSET, su file di dati distribuiti in più sottocartelle.

L'esempio seguente elenca tutti i file parquet e il relativo percorso.

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;  

Per altre informazioni, vedere filename() e filepath().