Démarrage rapide : Charger en masse des données à l’aide de l’instruction COPYQuickstart: Bulk load data using the COPY statement

Dans ce guide de démarrage rapide, vous allez charger en masse des données dans votre pool SQL au moyen de l’instruction COPY simple et flexible pour l’ingestion de données à débit élevé.In this quickstart, you'll bulk load data into your SQL pool using the simple and flexible COPY statement for high-throughput data ingestion. L’instruction COPY est l’utilitaire de chargement recommandé, car il vous permet de charger des données de manière fluide et flexible en fournissant des fonctionnalités pour :The COPY statement is the recommended loading utility as it enables you to seamlessly and flexibly load data by providing functionality to:

  • Autoriser le chargement aux utilisateurs avec privilèges plus restreints, sans avoir besoin d’autorisations CONTROL strictes sur l’entrepôt de donnéesAllow lower privileged users to load without needing strict CONTROL permissions on the data warehouse
  • Tirer parti uniquement d’une instruction T-SQL sans avoir à créer d’objets de base de données supplémentairesLeverage only a single T-SQL statement without having to create any additional database objects
  • Bénéficier d’un meilleur modèle d’autorisation sans exposer les clés de compte de stockage à l’aide de signatures d’accès partagé (SAS)Leverage a finer permission model without exposing storage account keys using Share Access Signatures (SAS)
  • Spécifier un autre compte de stockage pour l’emplacement ERRORFILE (REJECTED_ROW_LOCATION)Specify a different storage account for the ERRORFILE location (REJECTED_ROW_LOCATION)
  • Personnaliser les valeurs par défaut pour chaque colonne cible et spécifier les champs de données sources à charger dans des colonnes cibles spécifiquesCustomize default values for each target column and specify source data fields to load into specific target columns
  • Spécifier une marque de fin de ligne personnalisée pour les fichiers CSVSpecify a custom row terminator for CSV files
  • Séparateurs de ligne, de champ et de chaîne d’échappement pour les fichiers CSVEscape string, field, and row delimiters for CSV files
  • Tirer parti des formats de date SQL Server pour les fichiers CSVLeverage SQL Server Date formats for CSV files
  • Spécifier des caractères génériques et plusieurs fichiers dans le chemin de l’emplacement du stockageSpecify wildcards and multiple files in the storage location path

PrérequisPrerequisites

Ce guide de démarrage rapide part du principe que vous disposez déjà d’un pool SQL.This quickstart assumes you already have a SQL pool. Si aucun pool SQL n’a été créé, utilisez le démarrage rapide Créer et se connecter - Portail.If a SQL pool hasn't been created, use the Create and Connect - portal quickstart.

Configurer les autorisations nécessairesSet up the required permissions

-- List the permissions for your user
select  princ.name
,       princ.type_desc
,       perm.permission_name
,       perm.state_desc
,       perm.class_desc
,       object_name(perm.major_id)
from    sys.database_principals princ
left join
        sys.database_permissions perm
on      perm.grantee_principal_id = princ.principal_id
where name = '<yourusername>';

--Make sure your user has the permissions to CREATE tables in the [dbo] schema
GRANT CREATE TABLE TO <yourusername>;
GRANT ALTER ON SCHEMA::dbo TO <yourusername>;

--Make sure your user has ADMINISTER DATABASE BULK OPERATIONS permissions
GRANT ADMINISTER DATABASE BULK OPERATIONS TO <yourusername>

--Make sure your user has INSERT permissions on the target table
GRANT INSERT ON <yourtable> TO <yourusername>

Créer la table cibleCreate the target table

Dans cet exemple, nous allons charger des données à partir du jeu de données des taxis de New York.In this example, we'll be loading data from the New York taxi dataset. Nous allons charger une table appelée Trip qui représente les trajets de taxi effectués en une seule année.We'll load a table called Trip that represents taxi trips taken within a single year. Exécutez le code suivant pour créer la table :Run the following to create the table:

CREATE TABLE [dbo].[Trip]
(
    [DateID] int NOT NULL,
    [MedallionID] int NOT NULL,
    [HackneyLicenseID] int NOT NULL,
    [PickupTimeID] int NOT NULL,
    [DropoffTimeID] int NOT NULL,
    [PickupGeographyID] int NULL,
    [DropoffGeographyID] int NULL,
    [PickupLatitude] float NULL,
    [PickupLongitude] float NULL,
    [PickupLatLong] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [DropoffLatitude] float NULL,
    [DropoffLongitude] float NULL,
    [DropoffLatLong] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [PassengerCount] int NULL,
    [TripDurationSeconds] int NULL,
    [TripDistanceMiles] float NULL,
    [PaymentType] varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [FareAmount] money NULL,
    [SurchargeAmount] money NULL,
    [TaxAmount] money NULL,
    [TipAmount] money NULL,
    [TollsAmount] money NULL,
    [TotalAmount] money NULL
)
WITH
(
    DISTRIBUTION = ROUND_ROBIN,
    CLUSTERED COLUMNSTORE INDEX
);

Exécuter l’instruction COPYRun the COPY statement

Exécutez l’instruction COPY suivante qui chargera les données du compte de stockage Blob Azure dans la table Trip.Run the following COPY statement that will load data from the Azure blob storage account into the Trip table.

COPY INTO [dbo].[Trip] FROM 'https://nytaxiblob.blob.core.windows.net/2013/Trip2013/'
WITH (
   FIELDTERMINATOR='|',
   ROWTERMINATOR='0x0A'
) OPTION (LABEL = 'COPY: dbo.trip');

Superviser la chargeMonitor the load

Vérifiez la progression de votre charge en exécutant régulièrement la requête suivante :Check whether your load is making progress by periodically running the following query:

SELECT  r.[request_id]                           
,       r.[status]                               
,       r.resource_class                         
,       r.command
,       sum(bytes_processed) AS bytes_processed
,       sum(rows_processed) AS rows_processed
FROM    sys.dm_pdw_exec_requests r
              JOIN sys.dm_pdw_dms_workers w
                     ON r.[request_id] = w.request_id
WHERE [label] = 'COPY: dbo.trip' and session_id <> session_id() and type = 'WRITER'
GROUP BY r.[request_id]                           
,       r.[status]                               
,       r.resource_class                         
,       r.command;

Étapes suivantesNext steps