Ingérer des données dans votre entrepôt à l’aide de l’instruction COPY

S'applique à : Entrepôt dans Microsoft Fabric

L'instruction COPY est le principal moyen d'ingérer des données dans les tables Warehouse. COPY effectue une ingestion de données à haut débit à partir d'un compte de stockage Azure externe, avec la flexibilité de configurer les options de format de fichier source, un emplacement pour stocker les lignes rejetées, ignorer les lignes d'en-tête et d'autres options.

Ce didacticiel présente des exemples d'ingestion de données pour une table Warehouse à l'aide de l'instruction T-SQL COPY. Il utilise les exemples de données Bing COVID-19 des Azure Open Datasets. Pour plus d’informations sur ces données, notamment sur leur schéma et leurs droits d’utilisation, consultez Bing COVID-19.

Remarque

Pour en savoir plus sur l'instruction T-SQL COPY, y compris d'autres exemples et la syntaxe complète, consultez COPY (Transact-SQL).

Créer une table

Avant d'utiliser l'instruction COPY, la table de destination doit être créée. Pour créer la table de destination pour cet exemple, procédez comme suit :

  1. Dans votre espace de travail Microsoft Fabric, recherchez et ouvrez votre entrepôt.

  2. Passez à l'onglet Accueil et sélectionnez Nouvelle requête SQL.

    Capture d'écran de la section supérieure de l'espace de travail de l'utilisateur montrant le bouton Nouvelle requête SQL.

  3. Pour créer la table utilisée comme destination dans ce tutoriel, exécutez le code suivant :

    CREATE TABLE [dbo].[bing_covid-19_data]
    (
        [id] [int] NULL,
        [updated] [date] NULL,
        [confirmed] [int] NULL,
        [confirmed_change] [int] NULL,
        [deaths] [int] NULL,
        [deaths_change] [int] NULL,
        [recovered] [int] NULL,
        [recovered_change] [int] NULL,
        [latitude] [float] NULL,
        [longitude] [float] NULL,
        [iso2] [varchar](8000) NULL,
        [iso3] [varchar](8000) NULL,
        [country_region] [varchar](8000) NULL,
        [admin_region_1] [varchar](8000) NULL,
        [iso_subdivision] [varchar](8000) NULL,
        [admin_region_2] [varchar](8000) NULL,
        [load_time] [datetime2](6) NULL
    );
    

Ingérer les données Parquet à l'aide de l'instruction COPY

Dans le premier exemple, nous chargeons des données à l'aide d'une source Parquet. Étant donné que ces données sont en accès public et ne nécessite pas d’authentification, vous pouvez facilement les copier en spécifiant la source et la destination. Aucun détail d'authentification n'est nécessaire. Vous n'aurez qu'à spécifier l'argument FILE_TYPE.

Utilisez le code suivant pour exécuter l'instruction COPY avec une source Parquet :

COPY INTO [dbo].[bing_covid-19_data]
FROM 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet'
WITH (
    FILE_TYPE = 'PARQUET'
);

Ingérer des données CSV à l'aide de l'instruction COPY et en sautant une ligne d'en-tête

Il est courant que les fichiers de valeurs séparées par des virgules (CSV) aient une ligne d'en-tête qui fournit les noms de colonne représentant la table dans un fichier CSV. L'instruction COPY peut copier des données à partir de fichiers CSV et ignorer une ou plusieurs lignes de l'en-tête du fichier source.

Si vous avez exécuté l'exemple précédent pour charger des données depuis Parquet, envisagez de supprimer toutes les données de votre table :

DELETE FROM [dbo].[bing_covid-19_data];

Pour charger des données à partir d'un fichier CSV en ignorant une ligne d'en-tête, utilisez le code suivant :

COPY INTO [dbo].[bing_covid-19_data]
FROM 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (
    FILE_TYPE = 'CSV', 
    FIRSTROW = 2
);

Vérification des résultats

L'instruction COPY se termine par l'ingestion de 4 766 736 lignes dans votre nouvelle table. Vous pouvez confirmer que l'opération s'est déroulée avec succès en exécutant une requête renvoyant le nombre total de lignes de votre table :

SELECT COUNT(*) FROM [dbo].[bing_covid-19_data];

Si vous avez exécuté les deux exemples sans supprimer les lignes entre les exécutions, vous verrez le résultat de cette requête avec deux fois plus de lignes. Bien que cela fonctionne pour l'ingestion de données dans ce cas, envisagez de supprimer toutes les lignes et d'ingérer les données une seule fois si vous souhaitez expérimenter davantage avec ces données.