Ingérer des données dans votre entrepôt à l’aide de Transact-SQL

S’applique à :✅ Entrepôt dans Microsoft Fabric

Le langage Transact-SQL offre des options que vous pouvez utiliser pour charger des données à grande échelle à partir de tables existantes de votre lakehouse et de votre entrepôt dans de nouvelles tables de votre entrepôt. Ces options sont pratiques si vous devez créer des versions d’une table avec des données agrégées, des versions de tables avec un sous-ensemble des lignes ou créer une table à partir d’une requête complexe. Observons quelques exemples.

Choisissez une instruction d’ingestion T-SQL

Le langage T-SQL fournit un ensemble riche d’instructions que vous pouvez utiliser pour ingérer et transformer des données dans votre entrepôt. Vous pouvez charger des données dans des tables nouvelles ou existantes, ajouter de nouvelles lignes, transformer des données lors de l’ingestion, ou synchroniser les changements apportés aux données existantes. Warehouse dans Microsoft Fabric prend en charge les instructions d’ingestion T-SQL suivantes :

  • CREATE TABLE AS SELECT Instruction CTAS qui vous permet de créer une table dans votre entrepôt à partir de la sortie d’une SELECT instruction.
  • SELECT INTO clause de requête qui vous permet de sélectionner des résultats à partir de n’importe quelle source de table et de rediriger les résultats vers une nouvelle table. Il s’agit d’une fonctionnalité standard dans le langage T-SQL.
  • INSERT ... SELECT ajoute les résultats de la requête à la table de destination. Utilisez cette instruction lorsque vous souhaitez charger un nouveau lot ou un sous-ensemble incrémental dans une table dont vous contrôlez le schéma.
  • MERGE compare les lignes source et destination et insère conditionnellement les lignes de destination, met à jour ou supprime les lignes de destination. Utilisez cette instruction lorsque vous devez synchroniser les nouvelles lignes et les lignes modifiées, ou réconcilier une destination avec un instantané source complet.

Choisissez une instruction selon que la table de destination existe déjà ou non et selon que vous souhaitez créer, ajouter ou synchroniser des données. La source de chaque instruction est une requête T-SQL. Vous pouvez utiliser des expressions, fonctions, filtres, jointures et agrégations supportés pour façonner les données lors de l’ingestion. Vous pouvez utiliser les sources de données suivantes pour lire les données de vos instructions T-SQL :

  • Lecture d’une table d’entrepôt, telle qu’une table intermédiaire.
  • Lecture d’un dossier Lakehouse Delta Lake à l’aide d’une table générée automatiquement dans le point de terminaison d’analytique SQL pour Lakehouse.
  • Lecture de fichiers CSV, Parquet ou JSONL directement à partir d’Azure Data Lake ou du stockage Blob Azure avec la fonction OPENROWSET.

Utilisez CTAS pour créer un tableau

CTAS crée la table de destination et charge les résultats de la requête en une seule opération. Le premier exemple montre comment créer une table qui est une copie de la table existante dbo.TaxiTrips , mais filtrée pour inclure uniquement les données de l’année 2023 :

CREATE TABLE dbo.TaxiTrips_2023
AS
SELECT * 
FROM dbo.TaxiTrips 
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

Utilisez CTAS pour créer et remplir une nouvelle table à partir des résultats de requête. Cette méthode est utile lorsque la table de destination n’existe pas ou lorsque vous souhaitez matérialiser des données transformées ou combinées provenant d’une ou plusieurs sources.

Utilisez SELECT INTO pour créer une table

SELECT ... INTO crée également une table de destination à partir des résultats de requête :

SELECT * 
INTO dbo.TaxiTrips_2023
FROM MyLakehouse.dbo.TaxiTrips 
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

Les deux, CTAS et SELECT ... INTO, déduisent les colonnes de destination à partir du résultat de la requête. Convertissez explicitement les expressions lorsque la destination nécessite un type de données, une précision ou une longueur spécifique.

Utilisez INSERT ... SELECT pour ajouter des données

INSERT ... SELECT charge les résultats d’une requête dans une table existante. Vous pouvez ajouter des données à une table en transformant des données à partir d’un fichier Parquet externe accessible publiquement :

INSERT INTO dbo.<table name>
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>.parquet') AS data;

Utilisez MERGE pour synchroniser les données

MERGE fait correspondre les lignes source et destination à l’aide d’une clé stable. Le modèle suivant suppose que dbo.DimCustomer existe déjà avec les colonnes utilisées par l’instruction. Assurez-vous que la source ne renvoie pas plus d’une ligne pour chaque clé de destination.

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

Utilisez WHEN NOT MATCHED BY SOURCE THEN DELETE uniquement lorsque la requête source représente l’ensemble complet des jeux de données faisant autorité pour les lignes concernées. N’utilisez pas cette clause avec un lot source incrémental, car les lignes de destination absentes du lot pourraient être supprimées.

Choisir une source de données

Les déclarations d’ingestion fonctionnent de manière cohérente entre les types de sources pris en charge. Seule la référence source change.

Fichiers dans un lac de données

Utilisez OPENROWSET pour lire des fichiers Parquet, CSV ou JSONL dans OneLake, Azure Data Lake Storage ou Stockage Blob Azure. Vous pouvez cibler un fichier, plusieurs fichiers avec des caractères génériques, ou des dossiers partitionnés.

Pour les chemins de fichiers, l’inférence de schéma, le filtrage des partitions, les fonctions de métadonnées et les exemples pour les quatre instructions d’ingestion, voir Ingérer et transformer les données de lac avec OPENROWSET et T-SQL.

Tables Delta dans un lakehouse

Le point d’accès d’analyse SQL d’un lakehouse expose les tables Delta dans sa /Tables zone. Depuis un entrepôt dans le même espace de travail, faites référence à une table en utilisant le nom <lakehouse>.<schema>.<table> en trois parties. Cela ne se limite pas aux tables Delta physiquement stockées dans le lakehouse. Les tables exposées via les raccourcis OneLake dans la zone /Tables peuvent également référencer des données stockées ailleurs, notamment la zone lakehouse /Files, le stockage externe comme ADLS ou Amazon S3, les données en miroir et les données OneLake dans d’autres espaces de travail. En utilisant cette architecture, vous pouvez interroger des données en raccourci via le point de terminaison SQL Analytics de Lakehouse sans copier les données dans le lakehouse.

Pour des exemples de création de tables, de chargements incrémentaux et de synchronisation, voir Ingérer des tables Delta Lake avec T-SQL.

Tables dans le magasin de données actuel

Utilisez un nom en deux parties, par exemple <schema>.<table> pour ingérer des données d’une table dans l’entrepôt actuel.

Pour des exemples Bronze‑Argent‑Or qui effectuent des jointures, agrègent et chargent progressivement des tables à l’intérieur d’un seul entrepôt, voir Ingérer des tables d’entrepôt et des bases de données mises en miroir avec T-SQL.

Bases de données miroirs et autres éléments de l’espace de travail

Pour ingérer des données provenant d’une base de données miroir, d’un autre entrepôt ou d’un autre élément supporté dans le même espace de travail, ajoutez l’élément dans l’Explorateur et utilisez le nom <item>.<schema>.<table>en trois parties. Pour en savoir plus sur les requêtes entre entrepôts, consultez Écrire une requête SQL inter-bases de données. Pour des exemples utilisant les deux modèles de nommage, voir Ingérer à partir de tables d’entrepôt et de bases de données miroir avec T-SQL.

Auditer et surveiller l’ingestion T-SQL

Les opérations CTAS, SELECT ... INTO, INSERT ... SELECT et MERGE apparaissent dans l’historique/l’activité des requêtes de l’entrepôt. Utilisez les insights des requêtes pour examiner les détails d’exécution et dépanner les requêtes d’ingestion.

Options d’ingestion des données

Utilisez l’ingestion T-SQL lorsque la charge inclut le filtrage, la conversion de type, les jointures, les calculs, l’agrégation ou la synchronisation. Choisissez une autre option lorsque : D’autres façons d’ingérer des données dans votre entrepôt incluent :