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.

Créez 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 instruction SELECT. Elle 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 tables dans votre espace de travail.

Remarque

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 colonnes year, month et dayofmonth avec des valeurs obtenues à partir de la colonne updated 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 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 saison affecte la propagation dans un pays/région spécifique. Il utilise la table créée dans l’exemple précédent avec la nouvelle colonne month 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 cette nouvelle table, nous pouvons voir que les États-Unis ont observé plus de cas confirmés sur toutes les années en January (janvier), puis en December (décembre) et October (octobre). 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 requête indiquant le nombre d’infections par mois aux États-Unis, triés par mois et par ordre décroissant. Le numéro du mois 1 est indiqué en haut.

Pour plus d’exemples et pour consulter le guide de référence 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 des tables basées sur le résultat d’une requête. Pour répliquer les exemples, mais sur des tables existantes, le modèle INSERT...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...SELECT 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 faire référence à 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 de nommage en trois parties [warehouse_or_lakehouse_name.][schema_name.]table_name. Prenons l’exemple des ressources d’espace de travail suivantes :

  • Un lakehouse nommé cases_lakehouse avec les dernières données de cas.
  • Un entrepôt nommé reference_warehouse avec les tables utilisées pour les données de référence.
  • Un 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.