PUT¶
Carrega arquivos de dados de um sistema de arquivos local para um dos seguintes estágios do Snowflake:
Um estágio interno nomeado.
Um estágio interno de uma tabela especificada.
O estágio interno do usuário atual.
Você pode carregar arquivos preparados em uma tabela usando o comando COPY INTO <tabela>.
Nota
PUT não oferece suporte ao carregamento de arquivos para estágios externos. Para carregar arquivos para estágios externos, use os utilitários fornecidos pelo serviço de nuvem.
O driver ODBC oferece suporte a PUT com contas Snowflake hospedadas nas seguintes plataformas:
Amazon Web Services
Google Cloud Platform
Microsoft Azure
- Consulte também:
GET , LIST , REMOVE , COPY FILES
Sintaxe¶
PUT file://<path_to_file>/<filename> internalStage
[ PARALLEL = <integer> ]
[ AUTO_COMPRESS = TRUE | FALSE ]
[ SOURCE_COMPRESSION = AUTO_DETECT | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE ]
[ OVERWRITE = TRUE | FALSE ]
Onde:
internalStage ::= @[<namespace>.]<int_stage_name>[/<path>] | @[<namespace>.]%<table_name>[/<path>] | @~[/<path>]
Parâmetros obrigatórios¶
file://path_to_file/filename
Especifica o URI para os arquivos de dados na máquina do cliente, em que:
path_to_file
é o caminho do diretório local para os arquivos a serem carregados.filename
é o nome do arquivo a ser carregado. Você pode usar caracteres curinga (*
,?
) para fazer upload de vários arquivos. Se o caminho do diretório ou nome do arquivo incluir caracteres especiais ou espaços, coloque o URI do arquivo inteiro entre aspas simples.
A formatação do URI é diferente dependendo do sistema operacional de seu cliente:
- Linux/macOS:
Você deve incluir a barra inicial no caminho. Por exemplo, para um arquivo chamado
load
usefile:///tmp/load
.- Windows:
Você deve incluir a unidade e a barra invertida no caminho e substituir os caracteres de barra invertida por barras. Por exemplo, para um arquivo chamado
load data
usefile://C:/temp/load data
.
internalStage
Especifica o local no Snowflake onde carregar os arquivos:
@[namespace.]int_stage_name[/path]
Os arquivos são carregados no estágio interno nomeado especificado.
@[namespace.]%table_name[/path]
Os arquivos são carregados no estágio da tabela especificada.
@~[/path]
Os arquivos são carregados no estágio do usuário atual.
Onde:
namespace
é o banco de dados ou esquema que contém o estágio ou tabela interna nomeada. É opcional se um banco de dados e um esquema forem usados dentro da sessão.path
é um caminho opcional que distingue letras maiúsculas de minúsculas para arquivos no local de armazenamento em nuvem que limita o acesso a um conjunto de arquivos. Os caminhos são chamados alternativamente de prefixos ou pastas por diferentes serviços de armazenamento em nuvem.
Nota
Se o nome do estágio ou o caminho incluir espaços ou caracteres especiais, coloque-os entre aspas simples. Por exemplo, use
'@"my stage"'
para um estágio chamado"my stage"
.
Parâmetros opcionais¶
PARALLEL = integer
Especifica o número de threads a serem utilizados para o carregamento de arquivos. O processo de upload separa os lotes de arquivos de dados por tamanho:
Pequenos arquivos (<64 MB, comprimidos ou não) são preparados em paralelo como arquivos individuais.
Os arquivos maiores são automaticamente divididos em partes, preparados ao mesmo tempo e remontados no estágio de destino. Um único thread pode carregar várias partes.
O aumento do número de threads pode melhorar o desempenho ao carregar arquivos grandes.
Valores suportados: qualquer valor inteiro de
1
(sem paralelismo) até99
(use 99 threads para carregar os arquivos).Padrão:
4
Nota
Um limite de 16 MB se aplica às versões mais antigas dos drivers do Snowflake, incluindo:
Versões do driver JDBC anteriores a 3.12.1.
Versões do driver ODBC anteriores a 2.20.5.
Versões do Python Connector anteriores a 2.2.0.
AUTO_COMPRESS = TRUE | FALSE
Especifica se o Snowflake usa gzip para comprimir arquivos durante o upload:
TRUE
: Snowflake compacta os arquivos (se eles ainda não estiverem compactados).FALSE
: Snowflake não compacta os arquivos.
Esta opção não oferece suporte a outros tipos de compressão. Para utilizar um tipo de compressão diferente, comprima o arquivo separadamente antes de executar o comando PUT. Em seguida, identificar o tipo de compressão usando a opção
SOURCE_COMPRESSION
.Certifique-se de que sua pasta local tenha espaço suficiente para que o Snowflake comprima os arquivos de dados antes de prepará-los. Se necessário, defina a variável de ambiente
TEMP
,TMPDIR
ouTMP
em seu sistema operacional para apontar para uma pasta local que contenha espaço livre adicional.Padrão:
TRUE
SOURCE_COMPRESSION = AUTO_DETECT | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
Especifica o método de compressão usado em arquivos já compactados que estão sendo preparados:
Valores suportados
Notas
AUTO_DETECT
Algoritmo de compressão detectado automaticamente, exceto para arquivos comprimidos com Brotli, que atualmente não podem ser detectados automaticamente. Se carregar arquivos comprimidos com Brotli, use explicitamente
BROTLI
em vez deAUTO_DETECT
.GZIP
BZ2
BROTLI
Deve ser usado se carregar arquivos comprimidos com Brotli.
ZSTD
Zstandard v0.8 (e superior) suportado.
DEFLATE
Arquivos compactados Deflate (com cabeçalho zlib, RFC1950).
RAW_DEFLATE
Arquivos compactados Raw Deflate (sem cabeçalho, RFC1951).
NONE
Os arquivos de dados a serem carregados não foram comprimidos.
Padrão:
AUTO_DETECT
Nota
O Snowflake usa esta opção para detectar como os arquivos de dados foram comprimidos para que possam ser descomprimidos e os dados extraídos para carregamento; ele não usa esta opção para comprimir os arquivos.
O upload de arquivos que foram comprimidos com outras recursos não é suportado atualmente.
OVERWRITE = TRUE | FALSE
Especifica se o Snowflake substitui um arquivo existente com o mesmo nome durante o upload:
TRUE
: um arquivo existente com o mesmo nome é substituído.FALSE
: um arquivo existente com o mesmo nome não é substituído.Observe que uma operação LIST no estágio é realizada em segundo plano, o que pode afetar o desempenho da operação PUT.
Se as tentativas de PUT um arquivo falhar porque existe um arquivo com o mesmo nome no estágio de destino, as seguintes opções estão disponíveis:
Carregar os dados do arquivo existente em uma ou mais tabelas, e remover o arquivo do estágio. Depois PUT um arquivo com dados novos ou atualizados no estágio.
Renomear o arquivo local, e depois tentar a operação PUT novamente.
Definir
OVERWRITE = TRUE
na instrução PUT. Faça isso somente se for realmente seguro substituir um arquivo por dados que talvez ainda não tenham sido carregados no Snowflake.
Observe que se sua conta Snowflake estiver hospedada no Google Cloud Platform, as instruções PUT não reconhecem quando o parâmetro OVERWRITE é definido como TRUE. Uma operação PUT sempre substitui quaisquer arquivos existentes no estágio de destino pelos arquivos locais que você está carregando.
Os seguintes clientes oferecem suporte à opção OVERWRITE para contas Snowflake hospedadas no Amazon Web Services ou no Microsoft Azure:
SnowSQL
Driver Snowflake ODBC
Driver Snowflake JDBC
Conector Snowflake para Python
Valores suportados: TRUE, FALSE.
Padrão:
FALSE
.
Notas de uso¶
O comando não pode ser executado a partir da página Worksheets na interface da web do Snowflake; em vez disso, use o cliente SnowSQL ou Drivers para carregar arquivos de dados, ou verifique a documentação de um cliente específico do Snowflake para verificar o suporte a este comando.
O comando não suporta o upload de vários arquivos com caminhos de diretório divergentes, porque não preserva a estrutura de diretórios do sistema de arquivos ao fazer upload de arquivos para seu estágio.
Por exemplo, a instrução PUT a seguir retorna um erro, pois não é possível especificar vários arquivos em subdiretórios aninhados.
PUT file:///tmp/data/** @my_int_stage AUTO_COMPRESS=FALSE;
Padrões de recursos de englobamento de arquivos, como curingas, são suportados, a menos que os arquivos que correspondam ao padrão tenham caminhos de diretório divergentes.
O comando não cria ou renomeia arquivos.
Todos os arquivos armazenados em estágios internos para operações de carregamento e descarregamento de dados são criptografados automaticamente usando criptografia forte AES-256 no lado do servidor. Por padrão, o Snowflake fornece criptografia adicional do lado do cliente com uma chave de 128 bits (com a opção de configurar uma chave de 256 bits). Para obter mais informações, consulte tipos de criptografia para estágios internos.
O comando ignora quaisquer arquivos duplicados que você tente carregar para o mesmo estágio. Um arquivo duplicado é um arquivo não modificado com o mesmo nome de um arquivo já preparado.
Para substituir um arquivo já preparado, você deve modificar o arquivo que está carregando para que seu conteúdo seja diferente do arquivo preparado, o que resulta em uma nova soma de verificação para o novo arquivo preparado.
Dica
Por razões de segurança, o comando se esgota após um determinado período. Isto pode ocorrer ao carregar arquivos de dados grandes e não compactados. Para evitar problemas de tempo limite de sessão, recomendamos comprimir grandes arquivos de dados usando um dos tipos de compressão suportados antes de fazer o upload dos arquivos. Em seguida, especificar o tipo de compressão para os arquivos usando a opção SOURCE_COMPRESSION
.
Você também pode considerar o aumento do valor da opção PARALLEL
, que pode ajudar no desempenho ao carregar grandes arquivos de dados.
Além disso, para aproveitar as operações paralelas ao carregar dados em tabelas (usando o comando COPY INTO <tabela>), recomendamos o uso de arquivos de dados que variam em tamanho de aproximadamente 100 a 250 MB comprimido. Se seus arquivos de dados forem maiores, considere o uso de uma ferramenta de terceiros para dividi-los em arquivos menores antes de compactá-los e carregá-los.
Exemplos¶
Carregar um arquivo chamado mydata.csv
no diretório /tmp/data
(em um ambiente Linux ou macOS) em um estágio interno chamado my_int_stage
:
PUT file:///tmp/data/mydata.csv @my_int_stage;
Carregar um arquivo chamado orders_001.csv
no diretório /tmp/data
(em um ambiente Linux ou macOS) no estágio da tabela orderstiny_ext
, com a compressão automática de dados desabilitada:
PUT file:///tmp/data/orders_001.csv @%orderstiny_ext AUTO_COMPRESS=FALSE;
O mesmo exemplo como acima, mas usando caracteres curinga no nome do arquivo para carregar vários arquivos:
PUT file:///tmp/data/orders_*01.csv @%orderstiny_ext AUTO_COMPRESS=FALSE;
Carregar um arquivo chamado mydata.csv
no diretório C:\temp\data
(em um ambiente Windows) no estágio do usuário atual, com a compressão automática de dados habilitada:
PUT file://C:/temp/data/mydata.csv @~ AUTO_COMPRESS=TRUE;
Como o exemplo anterior, mas carregando o arquivo do diretório C:\temp\load data
(em um ambiente Windows):
PUT 'file://C:/temp/load data/mydata.csv' @~ AUTO_COMPRESS=TRUE;