COPIAR PARA (Transact-SQL)
Aplica-se a:Azure Synapse Analytics
Este artigo explica como usar a instrução COPY no Azure Synapse Analytics para carregar de contas de armazenamento externas. A instrução COPY fornece a maior flexibilidade para a ingestão de dados de alta taxa de transferência no Azure Synapse Analytics.
Observação
Para Warehouse no Microsoft Fabric, visite COPY INTO.
Use COPY para os seguintes recursos:
- Use usuários com privilégios mais baixos para carregar sem precisar de permissões rígidas de CONTROLE no data warehouse
- Execute uma única instrução T-SQL sem ter que criar nenhum outro objeto de banco de dados
- Analise e carregue corretamente arquivos CSV onde delimitadores (string, field, row) são escapados dentro de colunas delimitadas por cadeia de caracteres
- Especifique um modelo de permissão mais fino sem expor chaves de conta de armazenamento usando Assinaturas de Acesso de Compartilhamento (SAS)
- Usar uma conta de armazenamento diferente para o local ERRORFILE (REJECTED_ROW_LOCATION)
- Personalizar valores padrão para cada coluna de destino e especificar campos de dados de origem para carregar em colunas de destino específicas
- Especifique um terminador de linha personalizado, terminador de campo e cotação de campo para arquivos CSV
- Usar formatos de data do SQL Server para arquivos CSV
- Especificar curingas e vários arquivos no caminho do local de armazenamento
- A descoberta automática de esquema simplifica o processo de definição e mapeamento de dados de origem em tabelas de destino
- O processo automático de criação de tabelas cria automaticamente as tabelas e funciona em conjunto com a descoberta automática de esquemas
- Carregue diretamente tipos de dados complexos de arquivos Parquet, como Mapas e Listas, em colunas de cadeia de caracteres, sem usar outras ferramentas para pré-processar os dados
Observação
Para carregar tipos de dados complexos de arquivos Parquet, a criação automática de tabelas deve ser ativada usando AUTO_CREATE_TABLE
.
Visite a seguinte documentação para obter exemplos abrangentes e guias de início rápido usando a instrução COPY:
- Guia de início rápido: carregar dados em massa usando a instrução COPY
- Guia de início rápido: exemplos usando a instrução COPY e seus métodos de autenticação suportados
- Guia de início rápido: criando a instrução COPY usando a interface do usuário avançada do Synapse Studio
Observação
Microsoft Entra ID era anteriormente conhecido como Azure Ative Directory (Azure AD).
Sintaxe
COPY INTO [ schema. ] table_name
[ (Column_list) ]
FROM '<external_location>' [ , ...n ]
WITH
(
[ FILE_TYPE = { 'CSV' | 'PARQUET' | 'ORC' } ]
[ , FILE_FORMAT = EXTERNAL FILE FORMAT OBJECT ]
[ , CREDENTIAL = (AZURE CREDENTIAL) ]
[ , ERRORFILE = ' [ http(s)://storageaccount/container ] /errorfile_directory [ / ] ] '
[ , ERRORFILE_CREDENTIAL = (AZURE CREDENTIAL) ]
[ , MAXERRORS = max_errors ]
[ , COMPRESSION = { 'Gzip' | 'DefaultCodec' | 'Snappy' } ]
[ , FIELDQUOTE = 'string_delimiter' ]
[ , FIELDTERMINATOR = 'field_terminator' ]
[ , ROWTERMINATOR = 'row_terminator' ]
[ , FIRSTROW = first_row ]
[ , DATEFORMAT = 'date_format' ]
[ , ENCODING = { 'UTF8' | 'UTF16' } ]
[ , IDENTITY_INSERT = { 'ON' | 'OFF' } ]
[ , AUTO_CREATE_TABLE = { 'ON' | 'OFF' } ]
)
Argumentos
schema_name
Opcional se o esquema padrão para o usuário que executa a operação for o esquema da tabela especificada. Se esquema não for especificado e o esquema padrão do usuário que executa a operação COPY for diferente do esquema da tabela especificada, COPY será cancelado e uma mensagem de erro será retornada.
table_name
O nome da tabela para COPIAR dados. A tabela de destino pode ser uma tabela temporária ou permanente e já deve existir no banco de dados. Para o modo de deteção automática de esquema, não forneça uma lista de colunas.
(column_list)
Uma lista opcional de uma ou mais colunas usadas para mapear campos de dados de origem para colunas de tabela de destino para carregamento de dados.
Não especifique um column_list quando AUTO_CREATE_TABLE = 'ON'
.
column_list devem ser colocados entre parênteses e delimitados por vírgulas. A lista de colunas tem o seguinte formato:
[(Column_name [Default_value padrão] [Field_number] [,... n])]
- Column_name - o nome da coluna na tabela de destino.
- Default_value - o valor padrão que substitui qualquer valor NULL no arquivo de entrada. O valor padrão aplica-se a todos os formatos de arquivo. COPY tenta carregar NULL do arquivo de entrada quando uma coluna é omitida da lista de colunas ou quando há um campo de arquivo de entrada vazio. O valor padrão precede a palavra-chave 'default'
- Field_number - o número do campo do arquivo de entrada que é mapeado para a coluna de destino.
- A indexação de campo começa em 1.
Quando uma lista de colunas não é especificada, COPY mapeia colunas com base na ordem de origem e destino: o campo de entrada 1 vai para a coluna de destino 1, o campo 2 vai para a coluna 2, etc.
Localizações externas
É onde os arquivos que contêm os dados são preparados. Atualmente, o Azure Data Lake Storage (ADLS) Gen2 e o Azure Blob Storage são suportados:
-
de localização externa para armazenamento de Blob:
https://<account\>.blob.core.windows.net/<container\>/<path\>
-
de localização externa para ADLS Gen2:
https://<account\>.dfs.core.windows.net/<container\>/<path\>
Observação
O ponto de extremidade .blob também está disponível para ADLS Gen2 e atualmente produz o melhor desempenho. Use o ponto de extremidade .blob quando .dfs não for necessário para seu método de autenticação.
conta - O nome da conta de armazenamento
Container - O nome do contêiner de blob
Caminho - o caminho da pasta ou do arquivo para os dados. A localização começa a partir do contentor. Se uma pasta for especificada, COPY recuperará todos os arquivos da pasta e todas as suas subpastas. COPY ignora pastas ocultas e não retorna arquivos que começam com um sublinhado (
_
) ou um ponto (.
), a menos que explicitamente especificado no caminho. Esse comportamento é o mesmo mesmo ao especificar um caminho com um curinga.
Os curingas podem ser incluídos no caminho onde
- A correspondência de nome de caminho curinga diferencia maiúsculas de minúsculas
- Curinga pode ser escapado usando o caractere de barra invertida (
\
) - A expansão curinga é aplicada recursivamente. Por exemplo, todos os arquivos CSV em Customer1 (incluindo subdiretórios de Customer1) são carregados no seguinte exemplo:
Account/Container/Customer1/*.csv
Observação
Para obter o melhor desempenho, evite especificar curingas que se expandiriam em um número maior de arquivos. Se possível, liste vários locais de arquivo em vez de especificar curingas.
Vários locais de arquivos só podem ser especificados a partir da mesma conta de armazenamento e contêiner por meio de uma lista separada por vírgula, como:
-
https://<account>.blob.core.windows.net/<container\>/<path\>
,https://<account\>.blob.core.windows.net/<container\>/<path\>
FILE_TYPE = { 'CSV' | 'PARQUET' | 'ORC' }
FILE_TYPE especifica o formato dos dados externos.
- CSV: Especifica um arquivo de valores separados por vírgulas compatível com o padrão de RFC 4180
. - PARQUET: Especifica um formato Parquet.
- ORC: Especifica um formato ORC (Optimized Row Columnar).
Observação
O tipo de arquivo 'Delimited Text' no PolyBase é substituído pelo formato de arquivo 'CSV', onde o delimitador de vírgula padrão pode ser configurado através do parâmetro FIELDTERMINATOR.
FILE_FORMAT = external_file_format_name
FILE_FORMAT se aplica apenas a arquivos Parquet e ORC e especifica o nome do objeto de formato de arquivo externo que armazena o tipo de arquivo e o método de compactação para os dados externos. Para criar um formato de arquivo externo, use CREATE EXTERNAL FILE FORMAT.
CREDENCIAL (IDENTITY = '', SECRET = '')
CREDENCIAL especifica o mecanismo de autenticação para acessar a conta de armazenamento externo. Os métodos de autenticação são:
CSV | Parquet | ORC | |
---|---|---|---|
de Armazenamento de Blob do Azure | SAS/MSI/ENTIDADE DE SERVIÇO/CHAVE/AAD | SAS/CHAVE | SAS/CHAVE |
Azure Data Lake Gen2 | SAS/MSI/ENTIDADE DE SERVIÇO/CHAVE/AAD | SAS (blob 1 )/MSI (dfs 2 )/ENTIDADE DE SERVIÇO/CHAVE/AAD | SAS (blob 1 )/MSI (dfs 2 )/ENTIDADE DE SERVIÇO/CHAVE/AAD |
1: O ponto de extremidade .blob (.blob.core.windows.net) no caminho do local externo é necessário para esse método de autenticação.
2: O ponto de extremidade .dfs (.dfs.core.windows.net) no caminho do local externo é necessário para esse método de autenticação.
Observação
- Ao autenticar usando o Microsoft Entra ID ou em uma conta de armazenamento público, CREDENTIAL não precisa ser especificado.
- Se sua conta de armazenamento estiver associada a uma rede virtual, você deverá autenticar usando uma identidade gerenciada.
Autenticação com assinaturas de acesso compartilhado (SAS)
Autenticação com Entidades de Serviço
- IDENTIDADE: <ClientID>@<OAuth_2.0_Token_EndPoint>
- SECRET: Chave principal do serviço de aplicativo Microsoft Entra
- Funções RBAC mínimas necessárias: contribuidor de dados de blob de armazenamento, contribuidor de dados de blob de armazenamento, proprietário de dados de blob de armazenamento ou leitor de dados de blob de armazenamento
Autenticação com chave de conta de armazenamento
- IDENTIDADE: Uma constante com um valor de 'Chave de Conta de Armazenamento'
- SECRET: Chave da conta de armazenamento
Autenticação com de identidade gerenciada (pontos de extremidade de serviço VNet)
- IDENTIDADE: Uma constante com um valor de 'Identidade Gerenciada'
- Funções RBAC mínimas necessárias: contribuidor de dados de blob de armazenamento ou proprietário de dados de blob de armazenamento para o servidor lógico de registrado do Microsoft Entra no Azure. Ao usar um pool SQL dedicado (anteriormente SQL DW) que não está associado a um espaço de trabalho Synapse, essa função RBAC não é necessária, mas a identidade gerenciada requer permissões de Lista de Controle de Acesso (ACL) nos objetos de destino para habilitar o acesso de leitura aos arquivos de origem
Autenticando com um usuário do Microsoft Entra
- CREDENCIAL não é necessária
- Funções RBAC mínimas necessárias: contribuidor de dados de blob de armazenamento ou proprietário de dados de blob de armazenamento para o usuário do Microsoft Entra
ERRORFILE = Localização do Diretório
ERRORFILE só se aplica ao CSV. Especifica o diretório dentro da instrução COPY onde as linhas rejeitadas e o arquivo de erro correspondente devem ser gravados. O caminho completo da conta de armazenamento pode ser especificado ou o caminho relativo ao contêiner pode ser especificado. Se o caminho especificado não existir, um será criado em seu nome. Um diretório filho é criado com o nome "_rejectedrows". O caractere "_" garante que o diretório seja escapado para outro processamento de dados, a menos que explicitamente nomeado no parâmetro location.
Observação
Quando um caminho relativo é passado para ERRORFILE , o caminho é relativo ao caminho do contêiner especificado em external_location.
Dentro deste diretório, há uma pasta criada com base no tempo de envio de carregamento no formato YearMonthDay -HourMinuteSecond (Ex. 20180330-173205). Nesta pasta, dois tipos de arquivos são gravados, o arquivo de motivo (Erro) e o arquivo de dados (Linha), cada um pré-anexado com o queryID, distributionID e um guid de arquivo. Como os dados e o motivo estão em arquivos separados, os arquivos correspondentes têm um prefixo correspondente.
Se ERRORFILE tiver o caminho completo da conta de armazenamento definido, o ERRORFILE_CREDENTIAL será usado para se conectar a esse armazenamento. Caso contrário, o valor mencionado para CREDENTIAL será usado. Quando a mesma credencial usada para os dados de origem é usada para ERRORFILE, as restrições que se aplicam a ERRORFILE_CREDENTIAL também se aplicam
ERRORFILE_CREDENTIAL = (IDENTITY= '', SECRET = '')
ERRORFILE_CREDENTIAL só se aplica a arquivos CSV. A fonte de dados e os métodos de autenticação suportados são:
Armazenamento de Blobs do Azure - SAS/SERVICE PRINCIPAL/AAD
Azure Data Lake Gen2 - SAS/MSI/SERVICE PRINCIPAL/AAD
Autenticação com assinaturas de acesso compartilhado (SAS)
Autenticação com Entidades de Serviço
- IDENTIDADE: <ClientID>@<OAuth_2.0_Token_EndPoint>
- SECRET: Chave principal do serviço de aplicativo Microsoft Entra
- Funções RBAC mínimas necessárias: contribuidor de dados de blob de armazenamento ou proprietário de dados de blob de armazenamento
Observação
Usar o ponto de extremidade de token OAuth 2.0 V1
Autenticação com de identidade gerenciada (pontos de extremidade de serviço VNet)
- IDENTIDADE: Uma constante com um valor de 'Identidade Gerenciada'
- Funções RBAC mínimas necessárias: contribuidor de dados de blob de armazenamento ou proprietário de dados de blob de armazenamento para o servidor de Banco de dados SQL registrado do Microsoft Entra
Autenticando com um usuário do Microsoft Entra
- CREDENCIAL não é necessária
- Funções RBAC mínimas necessárias: contribuidor de dados de blob de armazenamento ou proprietário de dados de blob de armazenamento para o usuário do Microsoft Entra
Não há suporte para o uso de uma chave de conta de armazenamento com ERRORFILE_CREDENTIAL.
Observação
Se você estiver usando a mesma conta de armazenamento para seu ERRORFILE e especificando o caminho ERRORFILE relativo à raiz do contêiner, não será necessário especificar o ERROR_CREDENTIAL.
MAXERRORS = max_errors
MAXERRORS especifica o número máximo de linhas de rejeição permitidas na carga antes que a operação COPY falhe. Cada linha que não pode ser importada pela operação COPY é ignorada e contada como um erro. Se max_errors não for especificado, o padrão será 0.
MAXERRORS não pode ser usado com AUTO_CREATE_TABLE.
Quando FILE_TYPE é 'PARQUET', exceções causadas por erros de conversão de tipo de dados (por exemplo, binário Parquet para inteiro SQL) ainda fazem com que COPY INTO falhe, ignorando MAXERRORS.
COMPRESSÃO = { 'DefaultCodec ' | 'Rápido' | 'GZIP' | 'NENHUMA'}
COMPACTAÇÃO é opcional e especifica o método de compactação de dados para os dados externos.
- CSV suporta GZIP
- Parquet suporta GZIP e Snappy
- ORC suporta DefaultCodec e Snappy.
- Zlib é a compressão padrão para ORC
O comando COPY deteta automaticamente o tipo de compactação com base na extensão do arquivo quando esse parâmetro não é especificado:
- .gz - GZIP
- .snappy – Snappy
- .deflate - DefaultCodec (apenas Parquet e ORC)
O comando COPY requer que os arquivos gzip não contenham lixo à direita para funcionar normalmente. O formato gzip requer estritamente que os arquivos sejam compostos por membros válidos sem qualquer informação adicional antes, entre ou depois deles. Qualquer desvio desse formato, como a presença de dados não gzip à direita, resultará na falha do comando COPY. Certifique-se de verificar se não há lixo à direita no final dos arquivos gzip para garantir que o COPY possa processar esses arquivos com êxito.
FIELDQUOTE = 'field_quote'
FIELDQUOTE aplica-se ao CSV e especifica um único caractere que é usado como o caractere de aspas (delimitador de cadeia de caracteres) no arquivo CSV. Se não for especificado, o caractere de aspas (") é usado como o caractere de aspas conforme definido no padrão RFC 4180. A notação hexadecimal também é suportada para FIELDQUOTE. ASCII estendido e caracteres de vários bytes não são suportados com UTF-8 para FIELDQUOTE.
Observação
Os caracteres FIELDQUOTE são escapados em colunas de cadeia de caracteres onde há a presença de um duplo FIELDQUOTE (delimitador).
FIELDTERMINATOR = 'field_terminator'
FIELDTERMINATOR Aplica-se apenas ao CSV. Especifica o terminador de campo usado no arquivo CSV. O terminador de campo pode ser especificado usando notação hexadecimal. O terminador de campo pode ser multi-caractere. O terminador de campo padrão é um (,). ASCII estendido e caracteres multibyte não são suportados com UTF-8 para FIELDTERMINATOR.
TERMINADOR DE LINHA = 'row_terminator'
ROW TERMINATOR Aplica-se apenas ao CSV. Especifica o terminador de linha usado no arquivo CSV. O terminador de linha pode ser especificado usando notação hexadecimal. O terminador de linha pode ser multi-caractere. Por padrão, o terminador de linha é \r\n
.
O comando COPY prefixa o caractere \r
ao especificar \n
(newline) resultando em \r\n
. Para especificar apenas o caractere \n
, use notação hexadecimal (0x0A
). Ao especificar terminadores de linha de vários caracteres em hexadecimal, não especifique 0x entre cada caractere.
ASCII estendido e caracteres de vários bytes não são suportados com UTF-8 para ROW TERMINATOR.
PRIMEIRA LINHA = First_row_int
FIRSTROW se aplica ao CSV e especifica o número da linha que é lido primeiro em todos os arquivos para o comando COPY. Os valores começam a partir de 1, que é o valor padrão. Se o valor for definido como dois, a primeira linha em cada arquivo (linha de cabeçalho) será ignorada quando os dados forem carregados. As linhas são ignoradas com base na existência de terminadores de linha.
DATEFORMAT = { 'mdy' | 'DMY' | «YMD» | «YDM» | 'meu' | 'dym' }
DATEFORMAT só se aplica ao CSV e especifica o formato de data do mapeamento de data para formatos de data do SQL Server. Para obter uma visão geral de todos os tipos e funções de dados de data e hora Transact-SQL, consulte Tipos de dados e funções de data e hora (Transact-SQL). DATEFORMAT dentro do comando COPY tem precedência sobre DATEFORMAT configurado no nível de sessão.
CODIFICAÇÃO = 'UTF8' | 'UTF16'
CODIFICAÇÃO só se aplica ao CSV. O padrão é UTF8. Especifica o padrão de codificação de dados para os arquivos carregados pelo comando COPY.
IDENTITY_INSERT = «LIGADO» | 'OFF'
IDENTITY_INSERT especifica se o valor ou valores de identidade no arquivo de dados importado devem ser usados para a coluna de identidade. Se IDENTITY_INSERT estiver DESATIVADO (padrão), os valores de identidade para esta coluna serão verificados, mas não importados. O Azure Synapse Analytics atribui automaticamente valores exclusivos com base nos valores de semente e incremento especificados durante a criação da tabela. Observe o seguinte comportamento com o comando COPY:
- Se IDENTITY_INSERT estiver DESATIVADO e a tabela tiver uma coluna de identidade
- Deve ser especificada uma lista de colunas que não mapeie um campo de entrada para a coluna de identidade.
- Se IDENTITY_INSERT estiver ATIVADO e a tabela tiver uma coluna de identidade
- Se uma lista de colunas for passada, ela deverá mapear um campo de entrada para a coluna de identidade.
- O valor padrão não é suportado para a COLUNA IDENTITY na lista de colunas.
- IDENTITY_INSERT só pode ser definido para uma mesa de cada vez.
AUTO_CREATE_TABLE = { 'ON' | 'OFF' }
AUTO_CREATE_TABLE especifica se a tabela pode ser criada automaticamente trabalhando em conjunto com a descoberta automática de esquema. Está disponível apenas para ficheiros Parquet.
- ON: Permite a criação automática de tabelas. O processo COPY INTO cria uma nova tabela automaticamente, descobrindo a estrutura do arquivo a ser carregado. Também pode ser usado com tabelas preexistentes para aproveitar a descoberta automática de esquema de arquivos Parquet.
- OFF: A criação automática de tabelas não está ativada. Inadimplência.
Observação
A criação automática de tabelas funciona em conjunto com a descoberta automática de esquemas. A criação automática de tabelas NÃO está habilitada por padrão.
Não carregue em tabelas distribuídas por hash a partir de arquivos Parquet usando COPY INTO com AUTO_CREATE_TABLE = 'ON'.
Se os arquivos Parquet devem ser carregados em tabelas distribuídas por hash usando COPY INTO, carregue-o em uma tabela de preparo round robin seguida por INSERT ... SELECT dessa tabela para a tabela distribuída de hash de destino.
Permissões
O usuário que executa o comando COPY deve ter as seguintes permissões:
Requer as permissões INSERT e ADMINISTER BULK OPERATIONS. No Azure Synapse Analytics, as permissões INSERT e ADMINISTER DATABASE BULK OPERATIONS são necessárias.
Além disso, se o usuário que executa o comando COPY também pretende gerar uma nova tabela e carregar dados nela, eles exigem as permissões CREATE TABLE e ALTER ON SCHEMA.
Por exemplo, para permitir que mike@contoso.com
use COPY para criar uma nova tabela no esquema HR
e inserir os dados de um arquivo Parquet, use o seguinte exemplo de Transact-SQL:
GRANT ADMINISTER DATABASE BULK OPERATIONS to [mike@contoso.com];
GRANT INSERT to [mike@contoso.com];
GRANT CREATE TABLE to [mike@contoso.com];
GRANT ALTER on SCHEMA::HR to [mike@contoso.com];
Comentários
A instrução COPY aceita apenas caracteres UTF-8 e UTF-16 válidos para dados de linha e parâmetros de comando. Arquivos de origem ou parâmetros (como ROW TERMINATOR ou FIELD TERMINATOR) que usam caracteres inválidos podem ser interpretados incorretamente pela instrução COPY e causar resultados inesperados, como corrupção de dados ou outras falhas. Verifique se os arquivos e parâmetros de origem são compatíveis com UTF-8 ou UTF-16 antes de invocar a instrução COPY.
Exemplos
Um. Carregar a partir de uma conta de armazenamento público
O exemplo a seguir é a forma mais simples do comando COPY, que carrega dados de uma conta de armazenamento público. Neste exemplo, os padrões da instrução COPY correspondem ao formato do arquivo csv do item de linha.
COPY INTO dbo.[lineitem]
FROM 'https://unsecureaccount.blob.core.windows.net/customerdatasets/folder1/lineitem.csv'
WITH (FIELDTERMINATOR = '|')
Os valores padrão do comando COPY são:
DATEFORMAT = Sessão DATEFORMAT
MAXERRORS = 0
O padrão de COMPRESSÃO é descompactado
FIELDQUOTE = '"'
FIELDTERMINATOR = ',;
ROWTERMINATOR = '\n'
Importante
A COPY trata \n
como \r\n
internamente. Para obter mais informações, consulte a seção ROWTERMINATOR.
PRIMEIRA LINHA = 1
CODIFICAÇÃO = «UTF8»
FILE_TYPE = «CSV»
IDENTITY_INSERT = 'DESLIGADO'
B. Carregar autenticação via Share Access Signature (SAS)
O exemplo a seguir carrega arquivos que usam o feed de linha como um terminador de linha, como uma saída UNIX. Este exemplo também usa uma chave SAS para autenticar no Armazenamento de Blobs do Azure.
COPY INTO test_1
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='<Your_SAS_Token>'),
--CREDENTIAL should look something like this:
--CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='?sv=2018-03-28&ss=bfqt&srt=sco&sp=rl&st=2016-10-17T20%3A14%3A55Z&se=2021-10-18T20%3A19%3A00Z&sig=IEoOdmeYnE9%2FKiJDSHFSYsz4AkNa%2F%2BTx61FuQ%2FfKHefqoBE%3D'),
FIELDQUOTE = '"',
FIELDTERMINATOR=';',
ROWTERMINATOR='0X0A',
ENCODING = 'UTF8',
DATEFORMAT = 'ymd',
MAXERRORS = 10,
ERRORFILE = '/errorsfolder',--path starting from the storage container
IDENTITY_INSERT = 'ON'
)
C. Carregar com uma lista de colunas com valores padrão autenticados via Chave de Conta de Armazenamento
Este exemplo carrega arquivos especificando uma lista de colunas com valores padrão.
--Note when specifying the column list, input field numbers start from 1
COPY INTO test_1 (Col_one default 'myStringDefault' 1, Col_two default 1 3)
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL=(IDENTITY= 'Storage Account Key', SECRET='<Your_Account_Key>'),
--CREDENTIAL should look something like this:
--CREDENTIAL=(IDENTITY= 'Storage Account Key', SECRET='x6RWv4It5F2msnjelv3H4DA80n0PQW0daPdw43jM0nyetx4c6CpDkdj3986DX5AHFMIf/YN4y6kkCnU8lb+Wx0Pj+6MDw=='),
FIELDQUOTE = '"',
FIELDTERMINATOR=',',
ROWTERMINATOR='0x0A',
ENCODING = 'UTF8',
FIRSTROW = 2
)
D. Carregar Parquet ou ORC usando o objeto de formato de arquivo existente
Este exemplo usa um curinga para carregar todos os arquivos do Parquet em uma pasta.
COPY INTO test_parquet
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/*.parquet'
WITH (
FILE_FORMAT = myFileFormat,
CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='<Your_SAS_Token>')
)
E. Carregar especificando curingas e vários arquivos
COPY INTO t1
FROM
'https://myaccount.blob.core.windows.net/myblobcontainer/folder0/*.txt',
'https://myaccount.blob.core.windows.net/myblobcontainer/folder1'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL=(IDENTITY= '<client_id>@<OAuth_2.0_Token_EndPoint>',SECRET='<key>'),
FIELDTERMINATOR = '|'
)
F. Carregar usando credenciais MSI
COPY INTO dbo.myCOPYDemoTable
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder0/*.txt'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL = (IDENTITY = 'Managed Identity'),
FIELDQUOTE = '"',
FIELDTERMINATOR=','
)
G. Carregar usando a deteção automática de esquema
COPY INTO [myCOPYDemoTable]
FROM 'https://myaccount.blob.core.windows.net/customerdatasets/folder1/lineitem.parquet'
WITH (
FILE_TYPE = 'Parquet',
CREDENTIAL = ( IDENTITY = 'Shared Access Signature', SECRET='<key>'),
AUTO_CREATE_TABLE = 'ON'
)
Perguntas Frequentes
Qual é o desempenho do comando COPY em comparação com o PolyBase?
O comando COPY tem melhor desempenho dependendo da sua carga de trabalho.
Os ficheiros comprimidos não podem ser divididos automaticamente. Para obter o melhor desempenho de carregamento, considere dividir sua entrada em vários arquivos ao carregar CSVs compactados.
Grandes arquivos CSV não compactados podem ser divididos e carregados em paralelo automaticamente, portanto, não há necessidade de dividir manualmente arquivos CSV não compactados na maioria dos casos. Em certos casos em que a divisão automática de arquivos não é viável devido às características dos dados, a divisão manual de CSVs grandes ainda pode beneficiar o desempenho.
Qual é a orientação de divisão de arquivos para o comando COPY carregando arquivos CSV compactados?
As orientações sobre o número de ficheiros são apresentadas no quadro seguinte. Uma vez atingido o número recomendado de ficheiros, terá um melhor desempenho quanto maiores forem os ficheiros. O número de arquivos é determinado pelo número de nós de computação multiplicado por 60. Por exemplo, em 6000DWU temos 12 nós de computação e 12*60 = 720 partições. Para obter uma experiência simples de divisão de arquivos, consulte Como maximizar a taxa de transferência de carga COPY com divisões de arquivos.
DWU | #Files |
---|---|
100 | 60 |
200 | 60 |
300 | 60 |
400 | 60 |
500 | 60 |
1,000 | 120 |
1,500 | 180 |
2,000 | 240 |
2,500 | 300 |
3,000 | 360 |
5,000 | 600 |
6,000 | 720 |
7,500 | 900 |
10,000 | 1200 |
15,000 | 1800 |
30,000 | 3600 |
Qual é a orientação de divisão de arquivos para o comando COPY carregando arquivos Parquet ou ORC?
Não há necessidade de dividir arquivos Parquet e ORC porque o comando COPY divide automaticamente os arquivos. Os arquivos Parquet e ORC na conta de armazenamento do Azure devem ter 256 MB ou mais para obter o melhor desempenho.
Existem limitações quanto ao número ou tamanho dos ficheiros?
Não há limitações quanto ao número ou tamanho dos ficheiros; no entanto, para um melhor desempenho, recomendamos ficheiros com pelo menos 4 MB.
Existem problemas conhecidos com a instrução COPY?
Se você tiver um espaço de trabalho do Azure Synapse que foi criado antes de 7 de dezembro de 2020, poderá encontrar uma mensagem de erro semelhante ao autenticar usando a Identidade Gerenciada: com.microsoft.sqlserver.jdbc.SQLServerException: Managed Service Identity has not been enabled on this server. Please enable Managed Service Identity and try again.
Siga estas etapas para contornar esse problema registrando novamente a identidade gerenciada do espaço de trabalho:
- Instale o Azure PowerShell. Consulte Instalar o PowerShell.
- Registre a identidade gerenciada do seu espaço de trabalho usando o PowerShell:
Connect-AzAccount Select-AzSubscription -SubscriptionId <subscriptionId> Set-AzSqlServer -ResourceGroupName your-database-server-resourceGroup -ServerName your-SQL-servername -AssignIdentity
Conteúdo relacionado
Aplica-se a:Warehouse no Microsoft Fabric
Este artigo explica como usar a instrução COPY no Warehouse no Microsoft Fabric para carregar de contas de armazenamento externas. A instrução COPY fornece a maior flexibilidade para a ingestão de dados de alto rendimento em seu Armazém e é uma estratégia para dados de ingestão em seu Warehouse.
No Microsoft Fabric, a instrução COPY (Transact-SQL) atualmente suporta os formatos de arquivo PARQUET e CSV. Para fontes de dados, apenas as contas do Azure Data Lake Storage Gen2 são suportadas.
Para obter mais informações sobre como usar COPY INTO em seu Warehouse no Microsoft Fabric, consulte Ingerir dados em seu Warehouse usando a instrução COPY.
Por padrão, COPY INTO
será autenticado como o usuário do Entra ID em execução.
Observação
Para o Azure Synapse Analytics, visite COPY INTO para o Azure Synapse Analytics.
Use COPY para os seguintes recursos:
- Use usuários com privilégios mais baixos para carregar sem precisar de permissões rígidas de CONTROLE no data warehouse.
- Execute uma única instrução T-SQL sem ter que criar nenhum outro objeto de banco de dados.
- Analise e carregue corretamente os arquivos CSV onde delimitadores (string, field, row) são escapados dentro de colunas delimitadas por cadeia de caracteres.
- Especifique um modelo de permissão mais fino sem expor chaves de conta de armazenamento usando Assinaturas de Acesso de Compartilhamento (SAS).
- Use uma conta de armazenamento diferente para o local ERRORFILE (REJECTED_ROW_LOCATION).
- Personalize os valores padrão para cada coluna de destino e especifique campos de dados de origem para carregar em colunas de destino específicas.
- Especifique um terminador de linha personalizado, terminador de campo e cotação de campo para arquivos CSV
- Especifique curingas e vários arquivos no caminho do local de armazenamento.
- Para obter mais informações sobre opções de ingestão de dados e práticas recomendadas, consulte Ingerir dados em seu depósito usando a instrução COPY.
Sintaxe
COPY INTO [ warehouse_name. ] [ schema_name. ] table_name
[ (Column_list) ]
FROM '<external_location>' [ , ...n ]
WITH
(
[ FILE_TYPE = { 'CSV' | 'PARQUET' } ]
[ , CREDENTIAL = (AZURE CREDENTIAL) ]
[ , ERRORFILE = ' [ http(s)://storageaccount/container ] /errorfile_directory [ / ] ] '
[ , ERRORFILE_CREDENTIAL = (AZURE CREDENTIAL) ]
[ , MAXERRORS = max_errors ]
[ , COMPRESSION = { 'Gzip' | 'Snappy' } ]
[ , FIELDQUOTE = 'string_delimiter' ]
[ , FIELDTERMINATOR = 'field_terminator' ]
[ , ROWTERMINATOR = 'row_terminator' ]
[ , FIRSTROW = first_row ]
[ , DATEFORMAT = 'date_format' ]
[ , ENCODING = { 'UTF8' | 'UTF16' } ]
[ , PARSER_VERSION = { '1.0' | '2.0' } ]
)
Argumentos
warehouse_name
Opcional se o depósito atual para o usuário que executa a operação for o depósito da tabela especificada. Se de depósito não for especificado e o esquema e a tabela especificados não existirem no depósito atual, COPY falhará e uma mensagem de erro será retornada.
schema_name
Opcional se o esquema padrão para o usuário que executa a operação for o esquema da tabela especificada. Se esquema não for especificado e o esquema padrão do usuário que executa a operação COPY for diferente do esquema da tabela especificada, COPY será cancelado e uma mensagem de erro será retornada.
table_name
O nome da tabela para COPIAR dados. A tabela de destino já deve existir no armazém.
(column_list)
Uma lista opcional de uma ou mais colunas usadas para mapear campos de dados de origem para colunas de tabela de destino para carregamento de dados.
column_list devem ser colocados entre parênteses e delimitados por vírgulas. A lista de colunas tem o seguinte formato:
[(Column_name [Default_value padrão] [Field_number] [,... n])]
- Column_name - o nome da coluna na tabela de destino.
- Default_value - o valor padrão que substitui qualquer valor NULL no arquivo de entrada. O valor padrão aplica-se a todos os formatos de arquivo. COPY tenta carregar NULL do arquivo de entrada quando uma coluna é omitida da lista de colunas ou quando há um campo de arquivo de entrada vazio. O valor padrão é precedido pela palavra-chave 'default'
- Field_number - O número do campo do arquivo de entrada que é mapeado para a coluna de destino.
- A indexação de campo começa em 1.
Quando column_list não é especificado, COPY mapeia colunas com base na ordem de origem e destino: o campo de entrada 1 vai para a coluna de destino 1, o campo 2 vai para a coluna 2, etc.
Observação
Ao trabalhar com arquivos Parquet no Warehouse no Microsoft Fabric, os nomes das colunas devem corresponder exatamente na origem e no destino. Se o nome da coluna na tabela de destino for diferente do nome da coluna no arquivo de parquet, a coluna da tabela de destino será preenchida com NULL.
Quando uma lista de colunas não é especificada, COPY mapeia colunas com base na ordem de origem e destino: o campo de entrada 1 vai para a coluna de destino 1, o campo 2 vai para a coluna 2, etc.
Localização externa
Observação
caminhos de do Fabric OneLake não são suportados no momento, apenas contas de armazenamento BLOB e ADLS Gen2 são suportadas.
Especifica onde os arquivos que contêm os dados são preparados. Atualmente, o Azure Data Lake Storage (ADLS) Gen2 e o Azure Blob Storage são suportados:
-
de localização externa para armazenamento de Blob:
https://<account\>.blob.core.windows.net/<container\>/<path\>
-
de localização externa para ADLS Gen2:
https://<account\>.dfs.core.windows.net/<container\>/<path\>
O Azure Data Lake Storage (ADLS) Gen2 oferece melhor desempenho do que o Azure Blob Storage (legado). Considere usar uma conta ADLS Gen2 sempre que possível.
Observação
O ponto de extremidade .blob também está disponível para ADLS Gen2 e atualmente produz o melhor desempenho. Use o ponto de extremidade .blob quando .dfs não for necessário para seu método de autenticação.
conta - O nome da conta de armazenamento
Container - O nome do contêiner de blob
Caminho - o caminho da pasta ou do arquivo para os dados. A localização começa a partir do contentor. Se uma pasta for especificada, COPY recuperará todos os arquivos da pasta e todas as suas subpastas. COPY ignora pastas ocultas e não retorna arquivos que começam com um sublinhado (_) ou um ponto (.) a menos que explicitamente especificado no caminho. Esse comportamento é o mesmo mesmo ao especificar um caminho com um curinga.
Curingas podem ser incluídos no caminho onde
- A correspondência de nome de caminho curinga diferencia maiúsculas de minúsculas
- O curinga pode ser escapado usando o caractere de barra invertida (\)
Observação
Para obter o melhor desempenho, evite especificar curingas que se expandiriam em um número maior de arquivos. Se possível, liste vários locais de arquivo em vez de especificar curingas.
Vários locais de arquivos só podem ser especificados a partir da mesma conta de armazenamento e contêiner por meio de uma lista separada por vírgula, como:
https://<account>.blob.core.windows.net/<container\>/<path\>, https://<account\>.blob.core.windows.net/<container\>/<path\>
Locais externos atrás de de firewall
Para acessar arquivos nos locais do Azure Data Lake Storage (ADLS) Gen2 e do Armazenamento de Blobs do Azure que estão atrás de um firewall, os seguintes pré-requisitos são aplicáveis:
- Um identidade de espaço de trabalho para o espaço de trabalho que hospeda seu depósito deve ser provisionado. Para obter mais informações sobre como configurar uma identidade de espaço de trabalho, consulte Identidade de espaço de trabalho.
- Sua conta Entra ID deve ser capaz de usar a identidade do espaço de trabalho.
- Sua conta do Entra ID deve ter acesso aos arquivos subjacentes por meio de controle de acesso baseado em função (RBAC) do Azure ou ACLs data lake.
- Seu espaço de trabalho do Fabric que hospeda o depósito deve ser adicionado como uma regra de instância de recurso . Para obter mais informações sobre como adicionar seu espaço de trabalho de malha com uma regra de instância de recurso, consulte Regra de instância de recurso.
FILE_TYPE = { 'CSV' | 'PARQUET' }
FILE_TYPE especifica o formato dos dados externos.
- CSV: Especifica um arquivo de valores separados por vírgulas compatível com o padrão de RFC 4180
. - PARQUET: Especifica um formato Parquet.
CREDENCIAL (IDENTITY = '', SECRET = '')
CREDENCIAL especifica o mecanismo de autenticação para acessar a conta de armazenamento externo. No Warehouse no Microsoft Fabric, os únicos mecanismos de autenticação suportados são a Assinatura de Acesso Compartilhado (SAS) e a Chave de Conta de Armazenamento (SAK). A autenticação EntraID do usuário é padrão, nenhuma credencial precisa ser especificada.
Observação
Ao usar uma conta de armazenamento público, CREDENTIAL não precisa ser especificado. Por padrão, o ID do Entra do usuário executor é usado.
Autenticação com Assinatura de Acesso Compartilhado (SAS)
Autenticação com chave de conta de armazenamento
- IDENTIDADE: Uma constante com um valor de 'Chave de Conta de Armazenamento'
- SECRET: Chave da conta de armazenamento
ERRORFILE = Localização do Diretório
ERRORFILE só se aplica ao CSV. Especifica o diretório onde as linhas rejeitadas e o arquivo de erro correspondente devem ser gravados. O caminho completo da conta de armazenamento pode ser especificado ou o caminho relativo ao contêiner pode ser especificado. Se o caminho especificado não existir, um será criado em seu nome. Um diretório filho é criado com o nome "_rejectedrows". O caractere "_" garante que o diretório seja escapado para outro processamento de dados, a menos que explicitamente nomeado no parâmetro location.
Observação
Quando um caminho relativo é passado para ERRORFILE , o caminho é relativo ao caminho do contêiner especificado em external_location.
Dentro deste diretório, há uma pasta criada com base no tempo de envio de carregamento no formato YearMonthDay -HourMinuteSecond (Ex. 20180330-173205). Nesta pasta é criada uma pasta com o ID da instrução e, sob essa pasta, dois tipos de arquivos são gravados: um erro. Json contendo os motivos de rejeição e um arquivo row.csv contendo as linhas rejeitadas.
Se ERRORFILE tiver o caminho completo da conta de armazenamento definido, o ERRORFILE_CREDENTIAL será usado para se conectar a esse armazenamento. Caso contrário, o valor mencionado para CREDENTIAL será usado. Quando a mesma credencial usada para os dados de origem é usada para ERRORFILE, as restrições que se aplicam a ERRORFILE_CREDENTIAL também se aplicam.
ERRORFILE_CREDENTIAL = (IDENTITY= '', SECRET = '')
ERRORFILE_CREDENTIAL só se aplica a arquivos CSV. No Warehouse no Microsoft Fabric, o único mecanismo de autenticação suportado é a Assinatura de Acesso Compartilhado (SAS).
- Autenticação com assinaturas de acesso compartilhado (SAS)
Observação
Se você estiver usando a mesma conta de armazenamento para seu ERRORFILE e especificando o caminho ERRORFILE relativo à raiz do contêiner, não será necessário especificar o ERROR_CREDENTIAL.
MAXERRORS = max_errors
MAXERRORS especifica o número máximo de linhas de rejeição permitidas na carga antes que a operação COPY falhe. Cada linha que a operação COPY não pode importar é ignorada e contada como um erro. Se max_errors não for especificado, o padrão será 0.
No Microsoft Fabric, MAXERRORS não pode ser usado quando FILE_TYPE é 'PARQUET'.
COMPRESSÃO = { 'Snappy' | 'GZIP' | 'NENHUMA'}
COMPACTAÇÃO é opcional e especifica o método de compactação de dados para os dados externos.
- CSV suporta GZIP
- Parquet suporta GZIP e Snappy
O comando COPY deteta automaticamente o tipo de compactação com base na extensão do arquivo quando esse parâmetro não é especificado:
- .gz - GZIP
Atualmente, o carregamento de arquivos compactados só é suportado com o PARSER_VERSION 1.0.
O comando COPY requer que os arquivos gzip não contenham lixo à direita para funcionar normalmente. O formato gzip requer estritamente que os arquivos sejam compostos por membros válidos sem qualquer informação adicional antes, entre ou depois deles. Qualquer desvio desse formato, como a presença de dados não gzip à direita, resultará na falha do comando COPY. Certifique-se de verificar se não há lixo à direita no final dos arquivos gzip para garantir que o COPY possa processar esses arquivos com êxito.
FIELDQUOTE = 'field_quote'
FIELDQUOTE só se aplica ao CSV. Especifica um único caractere que é usado como o caractere de aspas (delimitador de cadeia de caracteres) no arquivo CSV. Se não for especificado, o caractere de aspas (") é usado como o caractere de aspas conforme definido no padrão RFC 4180. A notação hexadecimal também é suportada para FIELDQUOTE. ASCII estendido e caracteres de vários bytes não são suportados com UTF-8 para FIELDQUOTE.
Observação
Os caracteres FIELDQUOTE são escapados em colunas de cadeia de caracteres onde há a presença de um duplo FIELDQUOTE (delimitador).
FIELDTERMINATOR = 'field_terminator'
FIELDTERMINATOR só se aplica ao CSV. Especifica o terminador de campo usado no arquivo CSV. O terminador de campo também pode ser especificado usando notação hexadecimal. O terminador de campo pode ser multi-caractere. O terminador de campo padrão é um (,). ASCII estendido e caracteres multibyte não são suportados com UTF-8 para FIELDTERMINATOR.
ROWTERMINATOR = 'row_terminator'
ROWTERMINATOR só se aplica ao CSV. Especifica o terminador de linha usado no arquivo CSV. O terminador de linha pode ser especificado usando notação hexadecimal. O terminador de linha pode ser multi-caractere. Os terminadores padrão são \r\n
, \n
e \r
.
O comando COPY prefixa o caractere \r
ao especificar \n
(newline) resultando em \r\n
. Para especificar apenas o caractere \n
, use notação hexadecimal (0x0A
). Ao especificar terminadores de linha de vários caracteres em hexadecimal, não especifique 0x entre cada caractere.
ASCII estendido e caracteres multibyte não são suportados com UTF-8 para ROWTERMINATOR.
PRIMEIRA LINHA = First_row_int
FIRSTROW só se aplica ao CSV. Especifica o número da linha que é lido primeiro em todos os arquivos para o comando COPY. Os valores começam a partir de 1, que é o valor padrão. Se o valor for definido como dois, a primeira linha em cada arquivo (linha de cabeçalho) será ignorada quando os dados forem carregados. As linhas são ignoradas com base na existência de terminadores de linha.
DATEFORMAT = { 'mdy' | 'DMY' | «YMD» | «YDM» | 'meu' | 'dym' }
DATEFORMAT só se aplica ao CSV e especifica o formato de data do mapeamento de data para formatos de data do SQL Server. Para obter uma visão geral de todos os tipos e funções de dados de data e hora Transact-SQL, consulte Tipos de dados e funções de data e hora (Transact-SQL). DATEFORMAT dentro do comando COPY tem precedência sobre DATEFORMAT configurado no nível de sessão.
CODIFICAÇÃO = 'UTF8' | 'UTF16'
CODIFICAÇÃO só se aplica ao CSV. O padrão é UTF8. Especifica o padrão de codificação de dados para os arquivos carregados pelo comando COPY.
PARSER_VERSION = { '1.0' | '2.0' }
PARSER_VERSION só se aplica ao CSV. O padrão é 2.0. Especifica o analisador de arquivo usado para ingestão quando o tipo de arquivo de origem é CSV. O analisador 2.0 oferece melhor desempenho para ingestão de arquivos CSV.
O Parser versão 2.0 tem as seguintes limitações:
- Arquivos CSV compactados não são suportados
- Arquivos com codificação UTF-16 não são suportados
- ROWTERMINATOR, FIELDTERMINATOR ou FIELDQUOTE multicaractere ou multibyte não é suportado. No entanto, '\r\n' é aceito como um ROWTERMINATOR padrão
Ao usar o analisador versão 1.0 com arquivos UTF-8, terminadores multibyte e multicaractere não são suportados para FIELDTERMINATOR.
O analisador versão 1.0 está disponível apenas para compatibilidade com versões anteriores e deve ser usado somente quando essas limitações forem encontradas.
Observação
Quando COPY INTO é usado com arquivos CSV compactados ou arquivos com codificação UTF-16, COPY INTO alterna automaticamente para PARSER_VERSION 1.0, sem a necessidade de ação do usuário. Para terminadores multicaracteres em FIELDTERMINATOR ou ROWTERMINATOR, a instrução COPY INTO falhará. Use PARSER_VERSION = '1.0' se forem necessários separadores de vários caracteres.
Permissões
O comando COPY requer um mínimo da função CONTRIBUTOR no nível do espaço de trabalho ou, alternativamente, a função VIEWER no nível do espaço de trabalho, além de ADMINISTRAR OPERAÇÕES EM MASSA DO BANCO DE DADOS permissão de banco de dados e INSERIR permissão nos objetos da tabela.
Comentários
A instrução COPY aceita apenas caracteres UTF-8 e UTF-16 válidos para dados de linha e parâmetros de comando. Arquivos de origem ou parâmetros (como ROW TERMINATOR ou FIELD TERMINATOR) que usam caracteres inválidos podem ser interpretados incorretamente pela instrução COPY e causar resultados inesperados, como corrupção de dados ou outras falhas. Verifique se os arquivos e parâmetros de origem são compatíveis com UTF-8 ou UTF-16 antes de invocar a instrução COPY.
Exemplos
Para obter mais informações sobre como usar COPY INTO em seu Warehouse no Microsoft Fabric, consulte Ingerir dados em seu Warehouse usando a instrução COPY.
Um. Carregar a partir de uma conta de armazenamento público
O exemplo a seguir é a forma mais simples do comando COPY, que carrega dados de uma conta de armazenamento público. Neste exemplo, os padrões da instrução COPY correspondem ao formato do arquivo csv do item de linha.
COPY INTO dbo.[lineitem]
FROM 'https://unsecureaccount.blob.core.windows.net/customerdatasets/folder1/lineitem.csv'
Os valores padrão do comando COPY são:
MAXERRORS = 0
O padrão de COMPRESSÃO é descompactado
FIELDQUOTE = '"'
FIELDTERMINATOR = ',;
ROWTERMINATOR = '\n'
Importante
A COPY trata \n
como \r\n
internamente. Para obter mais informações, consulte a seção ROWTERMINATOR.
PRIMEIRA LINHA = 1
CODIFICAÇÃO = «UTF8»
FILE_TYPE = «CSV»
B. Carregar autenticação via Share Access Signature (SAS)
O exemplo a seguir carrega arquivos que usam o feed de linha como um terminador de linha, como uma saída UNIX. Este exemplo também usa uma chave SAS para autenticar no Armazenamento de Blobs do Azure.
COPY INTO test_1
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='<Your_SAS_Token>'),
--CREDENTIAL should look something like this:
--CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='?sv=2018-03-28&ss=bfqt&srt=sco&sp=rl&st=2016-10-17T20%3A14%3A55Z&se=2021-10-18T20%3A19%3A00Z&sig=IEoOdmeYnE9%2FKiJDSHFSYsz4AkNa%2F%2BTx61FuQ%2FfKHefqoBE%3D'),
FIELDQUOTE = '"',
FIELDTERMINATOR = ';',
ROWTERMINATOR = '0X0A',
ENCODING = 'UTF8',
MAXERRORS = 10,
ERRORFILE = '/errorsfolder'--path starting from the storage container
)
C. Carregar com uma lista de colunas com valores padrão autenticados por meio da Chave de Conta de Armazenamento (SAK)
Este exemplo carrega arquivos especificando uma lista de colunas com valores padrão.
--Note when specifying the column list, input field numbers start from 1
COPY INTO test_1 (Col_one default 'myStringDefault' 1, Col_two default 1 3)
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL=(IDENTITY= 'Storage Account Key', SECRET='<Your_account_key>'),
--CREDENTIAL should look something like this:
--CREDENTIAL=(IDENTITY= 'Storage Account Key', SECRET='x6RWv4It5F2msnjelv3H4DA80n0PQW0daPdw43jM0nyetx4c6CpDkdj3986DX5AHFMIf/YN4y6kkCnU8lb+Wx0Pj+6MDw=='),
FIELDQUOTE = '"',
FIELDTERMINATOR=',',
ROWTERMINATOR='0x0A',
ENCODING = 'UTF8',
FIRSTROW = 2
)
D. Pavimento de carga
Este exemplo usa um curinga para carregar todos os arquivos Parquet em uma pasta usando o EntraID do usuário em execução.
COPY INTO test_parquet
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/*.parquet'
WITH (
FILE_TYPE = 'PARQUET'
)
E. Carregar especificando curingas e vários arquivos
COPY INTO t1
FROM
'https://myaccount.blob.core.windows.net/myblobcontainer/folder0/*.txt',
'https://myaccount.blob.core.windows.net/myblobcontainer/folder1'
WITH (
FILE_TYPE = 'CSV',
CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='<Your_SAS_Token>')
FIELDTERMINATOR = '|'
)
Perguntas Frequentes
Qual é a orientação de divisão de arquivos para o comando COPY carregando arquivos CSV compactados?
Considere dividir arquivos CSV grandes, especialmente quando o número de arquivos for pequeno, mas mantenha os arquivos em um mínimo de 4 MB cada para um melhor desempenho.
Qual é a orientação de divisão de arquivos para o comando COPY carregando arquivos Parquet?
Considere dividir arquivos Parquet grandes, especialmente quando o número de arquivos é pequeno.
Existem limitações quanto ao número ou tamanho dos ficheiros?
Não há limitações quanto ao número ou tamanho dos ficheiros; no entanto, para um melhor desempenho, recomendamos ficheiros com pelo menos 4 MB.
Que método de autenticação é usado quando não especifico uma credencial?
Por padrão, COPY INTRO
usará o ID do Entra do usuário em execução.