COPY FILES¶
Copie os arquivos de um estágio de origem para um estágio de saída. É possível fornecer a lista de arquivos a ser copiada usando uma consulta ou uma listagem em um estágio existente.
Use um estágio como fonte se quiser copiar arquivos:
Entre estágios sem renomeação.
De um conjunto de arquivos com base em um único padrão entre estágios sem renomeação.
De um conjunto de nomes de arquivos embutidos em código.
Use uma consulta como fonte se quiser copiar arquivos:
De ou para um conjunto de arquivos definido por consulta (instrução SELECT).
De arquivos escritos por uma UDF (por exemplo, Gravação de arquivos de UDFs e UDTFs do Snowpark Python).
Com URLs com escopo ou de estágio.
Esse comando oferece suporte a operações de cópia de arquivos de e para os estágios nomeados existentes, conforme ilustrado na tabela a seguir:
Localização de origem |
Local de destino |
---|---|
Estágio nomeado interno |
Estágio nomeado interno |
Estágio externo |
Estágio nomeado interno |
Estágio nomeado interno |
Estágio externo |
Estágio externo |
Estágio externo |
Um estágio externo de destino ou origem pode fazer referência a arquivos em qualquer um dos seguintes serviços de armazenamento em nuvem ou locais:
Amazon S3
Google Cloud Storage
Armazenamento de blobs do Microsoft Azure
Microsoft Data Lake Storage Gen2
Microsoft Azure de uso geral v2
- Consulte também:
Sintaxe¶
Como copiar de um estágio
COPY FILES INTO @[<namespace>.]<stage_name>[/<path>/]
FROM @[<namespace>.]<stage_name>[/<path>/]
[ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ]
[ PATTERN = '<regex_pattern>' ]
[ DETAILED_OUTPUT = { TRUE | FALSE } ]
Como copiar de uma consulta
COPY FILES INTO @[<namespace>.]<stage_name>[/<path>/]
FROM ( SELECT <existing_url> [ , <new_filename> ] FROM ... )
[ DETAILED_OUTPUT = { TRUE | FALSE } ]
Parâmetros obrigatórios¶
INTO @[namespace.]stage_name[/path/]
Especifica o local de destino dos arquivos copiados.
namespace
é o banco de dados ou esquema no qual está o estágio interno ou externo, na forma dedatabase_name.schema_name
ouschema_name
. O namespace é opcional se um banco de dados e esquema estiverem em uso atualmente dentro da sessão do usuário; caso contrário, ele é obrigatório.path
é um caminho opcional que diferencia maiúsculas de minúsculas no local de armazenamento em nuvem que especifica um conjunto de arquivos a serem copiados do estágio de origem ou de um local específico no estágio de destino. Seu serviço de armazenamento em nuvem pode chamar o caminho de prefixo ou pasta.
Nota
Se um nome de caminho de destino ou de origem incluir caracteres especiais ou espaços, é necessário colocar o valor
INTO ...
entre aspas simples.Os valores para
INTO ...
devem ser constantes literais. Os valores não podem ser variáveis de SQL.
Usando um estágio como fonte¶
FROM @[namespace.]stage_name[/path/]
Especifica o local de origem onde os arquivos a serem copiados são preparados. Os valores fornecidos para
FROM ...
seguem as mesmas especificações e restrições dos valores deINTO...
.
Como usar uma consulta como fonte¶
FROM (SELECT existing_url [ , new_filename ] FROM ... )
Especifica o(s) local(is) de origem e o(s) local(is) de saída relativo(s) opcional(is) das cópias. Cada linha retornada da consulta SELECT representa um arquivo a ser copiado.
existing_url
pode ser um URL com escopo, um nome de estágio ou um URL de estágio.new_filename
é um caminho relativo do estágio de saída fornecido paraINTO
. O arquivo resultante será então copiado para:@[<namespace>.]<stage_name>[/<path>]<new_filename>
Se a coluna
new_filename
não for fornecida, será usado o caminho relativo deexisting_url
.
Parâmetros opcionais¶
FILES = ( 'file_name' [ , 'file_name' ... ] )
Especifica uma lista de um ou mais nomes de arquivos separados por vírgula para copiar. Os arquivos já devem estar preparados no local de origem especificado no comando. Snowflake ignora todos os arquivos especificados que não podem ser encontrados.
Você pode especificar no máximo 1.000 nomes de arquivo.
Copiar arquivos da consulta não é compatível com essa opção. Em vez disso, use a consulta para fornecer a lista de nomes de arquivo.
Nota
Para definir o caminho do arquivo para estágios externos, o Snowflake acrescenta o URL na definição do estágio a cada nome de arquivo na lista.
No entanto, o Snowflake não insere um separador entre o caminho e o nome do arquivo. Você deve incluir explicitamente um separador (
/
) no fim do URL na definição do estágio ou no início de cada nome de arquivo na listaFILES
.PATTERN = 'regex_pattern'
Especifica um padrão de expressão regular para filtrar a lista de arquivos a serem copiados. Este comando aplica a expressão regular a todo o local de armazenamento na cláusula
FROM
.Copiar arquivos da consulta não é compatível com essa opção. Em vez disso, use a consulta para corresponder ao padrão.
Dica
Para obter melhor desempenho, evite padrões que filtrem um grande número de arquivos.
DETAILED_OUTPUT = { TRUE | FALSE }
Especifica se a saída do comando deve resumir os resultados da operação de cópia ou listar cada arquivo copiado.
- Valores:
Se
TRUE
, a saída incluirá uma linha para cada arquivo copiado no local de destino. Uma única coluna chamadafile
contém o caminho de destino (se aplicável) e o nome do arquivo para cada arquivo copiado.Se
FALSE
, a saída será uma única linha com o número de arquivos que foram copiados.
- Padrão:
TRUE
Requisitos de controle de acesso¶
Uma função usada para executar este comando SQL deve ter os seguintes privilégios (dependendo dos locais de origem e destino) no mínimo:
Privilégio |
Objeto |
Notas |
---|---|---|
USAGE |
Estágio externo |
Obrigatório em um estágio externo de origem ou destino. |
READ |
Estágio nomeado interno |
Obrigatório em um estágio interno de origem. |
WRITE |
Estágio nomeado interno |
Obrigatório em um estágio interno de destino. |
O privilégio USAGE no banco de dados e no esquema pai é necessário para executar operações em qualquer objeto de um esquema.
Para instruções sobre como criar uma função personalizada com um conjunto específico de privilégios, consulte Criação de funções personalizadas.
Para informações gerais sobre concessões de funções e privilégios para executar ações de SQL em objetos protegíveis, consulte Visão geral do controle de acesso.
Notas de uso¶
Esse comando não é compatível com o seguinte:
Cópia de arquivos para ou de estágios de tabela.
Ao usar um estágio como fonte, a cópia de arquivos de ou para os estágios de usuário.
Cópia de dados em classes de armazenamento em nuvem de arquivo que exigem restauração antes de serem recuperados. As classes de armazenamento de arquivos incluem Amazon S3 Glacier Flexible Retrieval, Glacier Deep Archive ou Microsoft Azure Archive Storage.
Copiando arquivos maiores que 5GB.
Considerações para executar este comando:
As instruções COPY FILES substituem quaisquer arquivos existentes com nomes correspondentes no local de destino. O comando não remove nenhum arquivo existente que não corresponda aos nomes dos arquivos copiados.
Se uma operação de cópia de arquivo falhar, o Snowflake não realizará nenhuma limpeza automática.
Copiar arquivos do Google Cloud Storage: uma instrução COPY FILES poderá falhar se a lista de objetos de um estágio externo incluir um ou mais blobs de diretório. Um blob de diretório é um caminho que termina com uma barra (
/
). Na saída de exemplo a seguir paraLIST @<stage>
,my_gcs_stage/load/
é um blob de diretório.+---------------------------------------+------+----------------------------------+-------------------------------+ | name | size | md5 | last_modified | |---------------------------------------+------+----------------------------------+-------------------------------| | my_gcs_stage/load/ | 12 | 12348f18bcb35e7b6b628ca12345678c | Mon, 11 Aug 2022 16:57:43 GMT | | my_gcs_stage/load/data_0_0_0.csv.gz | 147 | 9765daba007a643bdff4eae10d43218y | Mon, 11 Aug 2022 18:13:07 GMT | +---------------------------------------+------+----------------------------------+-------------------------------+
O Google cria blobs de diretório quando você usa o console do Google Cloud para criar um diretório.
Para evitar esse problema e especificar quais arquivos devem ser copiados, use a opção
PATTERN
(para copiar do estágio) ouFROM
(para copiar da consulta).Para obter um exemplo, consulte Cópia de arquivos usando correspondência de padrões.
O comando COPY FILES incorre em custos de transferência de dados e computação:
Transferência de dados: os provedores de nuvem podem cobrar pelos dados transferidos de sua própria rede. Para recuperar essas despesas, o Snowflake cobra uma taxa por byte quando você copia arquivos de um estágio interno do Snowflake para um estágio externo em uma região diferente ou com um provedor de nuvem diferente. O Snowflake não cobra pela entrada de dados (por exemplo, ao copiar arquivos de um estágio externo para um estágio interno).
Para obter mais informações sobre faturamento por transferência de dados, consulte Explicação do custo de transferência de dados.
Computar: COPY FILES é um recurso sem servidor e não requer um warehouse virtual. O item de linha do comando COPY FILES na sua fatura do Snowflake não inclui nenhuma cobrança de serviços de nuvem.
Para obter mais informações sobre o faturamento de recursos de computação, consulte Explicação dos custos de computação.
Nota
Alguns recursos do Snowflake, como Native Apps e planilhas, geram cobranças de COPY FILES. Como resultado, você poderá ver cobranças de COPY FILES, mesmo que não tenha executado o comando COPY FILES. Para obter mais informações sobre essas cobranças, entre em contato com o suporte Snowflake.
Snowflake não mantém um histórico de cópia de arquivo para este comando.
Exemplos¶
Cópia de arquivos¶
Copie todos os arquivos de um estágio de origem existente (src_stage
) para um estágio de destino existente (trg_stage
):
COPY FILES
INTO @trg_stage
FROM @src_stage;
Nota
Para copiar arquivos de ou para um estágio externo com um local de armazenamento protegido, certifique-se de que a definição do estágio inclua credenciais para acessar o local de armazenamento em nuvem.
Especifique os nomes dos arquivos a serem copiados de um estágio de origem existente (src_stage
) para um estágio de destino existente (trg_stage
):
COPY FILES
INTO @trg_stage
FROM @src_stage
FILES = ('file1.csv', 'file2.csv');
Copie os arquivos de um caminho específico em um estágio existente (src_stage/src_path/
) para um caminho específico em um estágio de destino existente (trg_stage/trg_path/
):
COPY FILES
INTO @trg_stage/trg_path/
FROM @src_stage/src_path/;
Cópia de arquivos usando correspondência de padrões¶
Use a correspondência de padrões para carregar somente arquivos CSV compactados em qualquer caminho em um estágio de origem existente (src_stage
) para um estágio de destino existente (trg_stage
):
COPY FILES
INTO @trg_stage
FROM @src_stage
PATTERN='.*/.*/.*[.]csv[.]gz';
O componente .*
representa zero ou mais ocorrências de qualquer caractere. Os colchetes escapam do caractere de período (.
) que precede uma extensão de arquivo.
Copie apenas os arquivos CSV não compactados cujos nomes incluam a cadeia de caracteres sales
:
COPY FILES
INTO @trg_stage
FROM @src_stage
PATTERN='.*sales.*[.]csv';
Cópia de arquivos definidos pela consulta¶
Cópia de um único arquivo¶
O nome do arquivo permanece o mesmo que no estágio de origem.
COPY FILES
INTO @trg_stage
FROM (SELECT '@src_stage/file.txt');
Cópia de um único arquivo para um arquivo arbitrário¶
COPY FILES
INTO @trg_stage
FROM (SELECT '@src_stage/file.txt', 'new_filename.txt');
Cópia de arquivos de uma tabela¶
As consultas genéricas são compatíveis para permitir o processamento geral.
-- Create a table with URLs
CREATE TABLE urls(src_file STRING, trg_file STRING);
INSERT INTO urls VALUES ('@src_stage/file.txt', 'new_filename.txt');
-- Insert additional URLs here
COPY FILES
INTO @trg_stage
FROM (SELECT src_file, trg_file FROM urls);
Cópia de apenas alguns arquivos¶
COPY FILES
INTO @trg_stage
FROM (SELECT src_file, trg_file FROM urls WHERE src_file LIKE '%file%');
Cópia de arquivos de um diretório¶
COPY FILES
INTO @trg_stage
FROM (SELECT relative_path FROM directory(@src_stage) WHERE relative_path LIKE '%.txt');