Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :✅Base de données SQL dans Microsoft Fabric
Important
Cette fonctionnalité est en version préliminaire.
La virtualisation des données dans une base de données SQL dans Fabric permet d’interroger des données externes stockées dans OneLake à l’aide de T-SQL.
Avec la syntaxe de virtualisation des données, vous pouvez exécuter des requêtes Transact-SQL (T-SQL) sur des fichiers qui stockent des données dans des formats de données courants dans OneLake. Vous pouvez combiner ces données avec des données relationnelles stockées localement à l’aide de jointures. Avec la virtualisation des données, vous pouvez accéder de manière transparente aux données externes en mode lecture seule, tout en la conservant dans son format d’origine et son emplacement.
Syntaxe
Fabric SQL Database prend en charge les fonctionnalités de virtualisation des données suivantes :
- CRÉER DES IDENTIFIANTS SCOPÉS DE BASE DE DONNÉES
- CRÉER UNE SOURCE DE DONNÉES EXTERNE
- CRÉER UN FORMAT DE FICHIER EXTERNE
- CRÉER UNE TABLE EXTERNE
- OPENROWSET (BULK)
- SÉLECTIONNEZ .. À PARTIR D’OPENROWSET
- Fonctions de métadonnées : filename(), filepath(), sp_describe_first_result_set()
Authentication
L'authentification auprès de Fabric Lakehouses utilise l'authentification par passage d'ID Microsoft Entra.
L’accès aux fichiers à partir de Fabric OneLake nécessite que l’identité de l’utilisateur dispose d’une autorisation pour le Lakehouse et pour l'emplacement du fichier.
Permissions
Les utilisateurs doivent disposer d’un accès READ au fichier ou au dossier dans OneLake, appliqué via la passe passthrough d’ID Microsoft Entra.
Types de fichiers pris en charge
- Parquet
- CSV
- Le format de fichier JSON est indirectement pris en charge en spécifiant le format de fichier CSV où les requêtes retournent chaque document sous forme de ligne distincte. Vous pouvez analyser des lignes plus loin à l’aide de JSON_VALUE et OPENJSON.
Sources de données prises en charge
Seul Fabric Lakehouse est actuellement pris en charge en mode natif. Toutefois, les raccourcis OneLake peuvent être utilisés pour s’étendre à différentes sources externes telles que Stockage Blob Azure, Azure Data Lake Gen2, Dataverse, Amazon S3, Amazon S3 Compatible, Google Cloud Storage, HTTPS public, etc.
Pour plus d’informations sur les raccourcis Fabric, consultez Unifiez les sources de données avec les raccourcis OneLake.
Comment trouver l’emplacement du fichier ABFSS d’un lakehouse
Pour créer une source de données Fabric Lakehouse, vous devez fournir l’identifiant de l’espace de travail, le locataire et l’identifiant de la maison du lac. Pour trouver l’emplacement du fichier ABFSS d’un lakehouse :
- Accédez au portail Fabric.
- Accédez à votre Lakehouse.
- Accédez à l’emplacement du dossier souhaité.
- Sélectionnez
..., puis Propriétés. - Copiez le chemin ABFS, qui ressemble à ceci :
abfss://<workspace ID>@<Tenant>.dfs.fabric.microsoft.com/<lakehouse ID>/Files/.
Limites
- Les tables externes CSV doivent être interrogées à l’aide de noms qualifiés de schéma, par exemple
dbo.Customer_CSV. -
BULK INSERTn’est actuellement pris en charge que lorsqu’il est utilisé en combinaison avecOPENROWSET (BULK).
Examples
Les exemples de scripts suivants utilisent un Fabric Lakehouse nommé Cold_Lake qui héberge le magasin Contoso et les données client dans des fichiers Parquet et csv.
R. Interroger un fichier Parquet avec OPENROWSET
L’exemple suivant illustre l’utilisation de OPENROWSET pour récupérer des données d'échantillon à partir d’un fichier 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. Interroger un fichier CSV avec OPENROWSET
L’exemple suivant illustre l’utilisation de OPENROWSET pour récupérer des données échantillons à partir d’un fichier 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;
Chapitre C. Créer une source de données externe
L’exemple suivant montre comment créer une source de données externe pour simplifier les tables et commandes externes comme OPENROWSET:
CREATE EXTERNAL DATA SOURCE [Cold_Lake]
WITH (
LOCATION = 'abfss://<workspace ID>@<tenant>.dfs.fabric.microsoft.com/<lakehouse ID>/Files/');
Avec une source de données externe créée, vous pouvez simplifier OPENROWSET, par exemple :
-- 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. Créer une table externe pour parquet
L’exemple suivant montre comment configurer un format de fichier externe, puis créer une table externe spécifiquement pour les données 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. Créer une table externe pour CSV
L’exemple suivant montre comment configurer un format de fichier externe et créer une table externe spécifiquement pour les données 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. Ingérer des données à l’aide d’OPENROWSET
L’exemple suivant montre comment OPENROWSET utiliser pour ingérer des données dans une nouvelle table :
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;
Pour une table existante, INSERT INTO vous pouvez l’utiliser pour remplir la table à partir de 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. Utiliser des fonctions de métadonnées - sp_describe_first_result_set
La fonction sp_describe_first_result_set peut être utilisée en combinaison avec OPENROWSET (BULK) pour estimer le schéma de fichier externe. Vous pouvez identifier le schéma pour les instructions CREATE TABLE ou CREATE EXTERNAL TABLE en vue d'une exploration de données plus approfondie.
La sp_describe_first_result_set fonction utilise un exemple de données pour estimer le schéma. Si l’exemple n’est pas représentatif, il peut fournir des résultats incorrects. Si le schéma est déjà connu, spécifiez-le via WITH la clause.
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';
Pour plus d’informations, consultez sp_describe_first_result_set().
H. Utiliser des fonctions de métadonnées - filename() et filepath()
La base de données FABRIC SQL met également à disposition filename() et filepath() fonctions pour l’exploration de dossiers et de fichiers, ainsi que la création de requêtes dynamiques, qui peuvent également être utilisées pour les colonnes virtuelles en combinaison avec OPENROWSET pour les fichiers de données sur plusieurs sous-dossiers.
Cet exemple répertorie tous les fichiers Parquet et leur emplacement.
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;
Pour plus d’informations, consultez nom_fichier() et filepath().