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 de nouvelles 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 à la suite d’une requête complexe. Examinons quelques exemples.

Important

Microsoft Fabric est en préversion.

Création d’une table avec le résultat d’une requête à l’aide de CREATE TABLE AS SELECT (CTAS)

L’instruction CREATE TABLE AS SELECT (CTAS) vous permet de créer une table dans votre entrepôt à partir de la sortie d’une SELECT instruction. Il exécute l’opération d’ingestion dans la nouvelle table en parallèle, ce qui la rend très efficace pour la transformation des données et la création de nouvelles tables dans votre espace de travail.

Notes

Les exemples de cet article utilisent l’exemple de jeu de données Bing COVID-19. Pour charger l’exemple de jeu de données, suivez les étapes décrites dans Ingérer des données dans votre entrepôt à l’aide de l’instruction COPY pour créer les exemples de données dans votre entrepôt.

Le premier exemple montre comment créer une table qui est une copie de la table existante dbo.[bing_covid-19_data_2023] , mais filtrée sur les données de l’année 2023 uniquement :

CREATE TABLE [dbo].[bing_covid-19_data_2023]
AS
SELECT * 
FROM [dbo].[bing_covid-19_data] 
WHERE DATEPART(YEAR,[updated]) = '2023';

Vous pouvez également créer une table avec de nouvelles yearcolonnes , month, dayofmonth avec des valeurs obtenues à partir de updated la colonne dans la table source. Cela peut être utile si vous essayez de visualiser les données d’infection par année, ou de voir les mois où la plupart des cas de COVID-19 sont observés :

CREATE TABLE [dbo].[bing_covid-19_data_with_year_month_day]
AS
SELECT DATEPART(YEAR,[updated]) [year], DATEPART(MONTH,[updated]) [month], DATEPART(DAY,[updated]) [dayofmonth], * 
FROM [dbo].[bing_covid-19_data];

Par exemple, vous pouvez créer un nouveau tableau récapitulant le nombre de cas observés dans chaque mois, quelle que soit l’année, pour évaluer la façon dont la saisonnalité peut affecter la propagation dans un pays/région donné. Il utilise la table créée dans l’exemple précédent avec la nouvelle month colonne comme source :

CREATE TABLE [dbo].[infections_by_month]
AS
SELECT [country_region],[month], SUM(CAST(confirmed as bigint)) [confirmed_sum]
FROM [dbo].[bing_covid-19_data_with_year_month_day]
GROUP BY [country_region],[month];

Sur la base de ce nouveau tableau, nous pouvons voir que le États-Unis observé plus de cas confirmés sur toutes les années dans le mois de , suivi de JanuaryDecember et October. April est le mois où le nombre de cas est le plus faible dans l’ensemble :

SELECT * FROM [dbo].[infections_by_month]
WHERE [country_region] = 'United States'
ORDER BY [confirmed_sum] DESC;

Capture d’écran des résultats de la requête montrant le nombre d’infections par mois dans le États-Unis, classés par mois, dans l’ordre décroissant. Le mois numéro 1 s’affiche en haut.

Pour plus d’exemples et de références sur la syntaxe, consultez CREATE TABLE AS SELECT (Transact-SQL).

Ingestion de données dans des tables existantes avec des requêtes T-SQL

Les exemples précédents créent de nouvelles tables basées sur le résultat d’une requête. Pour répliquer les exemples mais sur des tables existantes, insert... Le modèle SELECT peut être utilisé. Par exemple, le code suivant ingère de nouvelles données dans une table existante :

INSERT INTO [dbo].[bing_covid-19_data_2023]
SELECT * FROM [dbo].[bing_covid-19_data] 
WHERE [updated] > '2023-02-28';

Les critères de requête de l’instruction SELECT peuvent être n’importe quelle requête valide, à condition que les types de colonnes de requête résultants s’alignent sur les colonnes de la table de destination. Si les noms de colonnes sont spécifiés et incluent uniquement un sous-ensemble des colonnes de la table de destination, toutes les autres colonnes sont chargées en tant que NULL. Pour plus d’informations, consultez Utilisation d’INSERT INTO... SÉLECTIONNEZ pour Importer en bloc des données avec une journalisation et un parallélisme minimaux.

Ingestion de données à partir de tables sur différents entrepôts et lakehouses

Pour CREATE TABLE AS SELECT et INSERT... SELECT, l’instruction SELECT peut également référencer des tables sur des entrepôts qui sont différentes de l’entrepôt où votre table de destination est stockée, à l’aide de requêtes entre entrepôts. Pour ce faire, utilisez la convention [warehouse_or_lakehouse_name.][schema_name.]table_namede nommage en trois parties . Par exemple, supposons que vous disposez des ressources d’espace de travail suivantes :

  • Lakehouse nommé cases_lakehouse avec les dernières données de cas.
  • Entrepôt nommé reference_warehouse avec les tables utilisées pour les données de référence.
  • Entrepôt nommé research_warehouse où la table de destination est créée.

Vous pouvez créer une table qui utilise un nommage en trois parties pour combiner les données des tables sur ces ressources d’espace de travail :

CREATE TABLE [research_warehouse].[dbo].[cases_by_continent]
AS
SELECT 
FROM [cases_lakehouse].[dbo].[bing_covid-19_data] cases
INNER JOIN [reference_warehouse].[dbo].[bing_covid-19_data] reference
ON cases.[iso3] = reference.[countrycode];

Pour en savoir plus sur les requêtes entre entrepôts, consultez Écrire une requête SQL inter-bases de données.

Étapes suivantes