Início Rápido: Carregar dados em massa com a instrução COPY

Neste início rápido, irá carregar dados em massa para o conjunto de SQL dedicado com a instrução COPY simples e flexível para ingestão de dados de alto débito. A instrução COPY é o utilitário de carregamento recomendado, uma vez que lhe permite carregar dados de forma totalmente integrada e flexível, fornecendo funcionalidade para:

  • Permitir que os utilizadores com privilégios inferiores carreguem sem precisar de permissões de CONTROLO estritas no armazém de dados
  • Tirar partido de apenas uma única instrução T-SQL sem ter de criar objetos de base de dados adicionais
  • Tirar partido de um modelo de permissão mais fino sem expor chaves de conta de armazenamento com Assinaturas de Acesso Partilhado (SAS)
  • Especifique uma conta de armazenamento diferente para a localização ERRORFILE (REJECTED_ROW_LOCATION)
  • Personalizar valores predefinidos para cada coluna de destino e especificar campos de dados de origem para carregar em colunas de destino específicas
  • Especificar um terminador de linha personalizado para ficheiros CSV
  • Delimitadores de cadeias de escape, campos e linhas para ficheiros CSV
  • Tirar partido SQL Server formatos de Data para ficheiros CSV
  • Especificar carateres universais e vários ficheiros no caminho da localização de armazenamento

Pré-requisitos

Este início rápido pressupõe que já tem um conjunto de SQL dedicado. Se não tiver sido criado um conjunto de SQL dedicado, utilize o início rápido Criar e Ligar - portal .

Configurar as permissões necessárias

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

Criar a tabela de destino

Neste exemplo, vamos carregar dados do conjunto de dados de táxis de Nova Iorque. Vamos carregar uma mesa chamada Trip que representa viagens de táxi realizadas dentro de um ano. Execute o seguinte para criar a tabela:

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

Executar a instrução COPY

Execute a seguinte instrução COPY que irá carregar dados da conta de armazenamento de blobs do Azure para a tabela Trip.

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

Monitorizar a carga

Verifique se a carga está a progredir ao executar periodicamente a seguinte consulta:

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;

Passos seguintes