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
- Para obter as melhores práticas sobre o carregamento de dados, veja Melhores Práticas para Carregar Dados.
- Para obter informações sobre como gerir os recursos para as cargas de dados, veja Isolamento da Carga de Trabalho.