Delen via


Quickstart: Gegevens in bulk laden met behulp van de COPY-opdracht

In deze quickstart laadt u gegevens bulksgewijs in uw toegewezen SQL-pool met behulp van de eenvoudige en flexibele COPY-instructie voor gegevensopname met hoge doorvoer. De COPY-instructie is het aanbevolen hulpmiddel voor het laden van gegevens, omdat het u in staat stelt gegevens naadloos en flexibel te laden door functionaliteit te bieden voor:

  • Toestaan dat gebruikers met lagere bevoegdheden laden zonder strikte CONTROL-machtigingen voor het datawarehouse nodig te hebben
  • Gebruik slechts één T-SQL-instructie zonder dat u extra databaseobjecten hoeft te maken
  • Maak gebruik van een nauwkeuriger machtigingsmodel zonder dat opslagaccountsleutels beschikbaar worden gemaakt met behulp van Sas (Share Access Signatures)
  • Geef een ander opslagaccount op voor de locatie van ERRORFILE (REJECTED_ROW_LOCATION)
  • Standaardwaarden voor elke doelkolom aanpassen en brongegevensvelden opgeven die moeten worden geladen in specifieke doelkolommen
  • Een aangepast rijeindteken opgeven voor CSV-bestanden
  • Escape-reeks-, veld- en rijscheidingstekens voor CSV-bestanden
  • SQL Server-datumnotaties gebruiken voor CSV-bestanden
  • Jokertekens en meerdere bestanden specificeren in het opslaglocatiepad

Vereiste voorwaarden

In deze snelstart wordt ervan uitgegaan dat u al een toegewezen SQL-pool hebt. Als er nog geen toegewezen SQL-pool is gemaakt, gebruikt u de quickstart Portal - maken en verbinden.

De vereiste machtigingen instellen

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

Maak de doeltabel

In dit voorbeeld laden we gegevens uit de gegevensset voor taxi's in New York. We laden een tabel met de naam Trip die taxiritten vertegenwoordigt die binnen één jaar zijn gemaakt. Voer het volgende uit om de tabel te maken:

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

Voer de COPY-instructie uit

Voer de volgende COPY-instructie uit waarmee gegevens uit het Azure Blob Storage-account worden geladen in de tabel Trip.

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

De belasting bewaken

Controleer of uw laadproces vordert door periodiek de volgende query uit te voeren:

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;

Volgende stappen