Carregamento e descarregamento de dados do Parquet¶
Este tutorial descreve como você pode carregar dados do Parquet transformando elementos de um arquivo Parquet preparado diretamente em colunas de tabela usando o comando COPY INTO <tabela>. O tutorial também descreve como você pode usar o comando COPY INTO <local> para descarregar os dados da tabela em um arquivo Parquet.
Neste tópico:
Pré-requisitos¶
Para este tutorial você vai precisar:
Baixe um arquivo de dados Parquet fornecido do Snowflake.
Crie um banco de dados, uma tabela e um warehouse virtual.
O banco de dados, tabela e warehouse virtual são objetos básicos do Snowflake necessários para a maioria das atividades do Snowflake.
Download do arquivo de dados de amostra¶
Para baixar a amostra do arquivo de dados Parquet, clique em cities.parquet
. Opcionalmente, clique com o botão direito no link e salve o link/arquivo em seu sistema de arquivos local.
O tutorial considera que você tenha descompactado os arquivos nos seguintes diretórios:
Linux/macOS:
/tmp/load
Windows:
C:\tempload
O arquivo de dados Parquet inclui amostra de dados do continente. O seguinte é um exemplo representativo:
{
"continent": "Europe",
"country": {
"city": [
"Paris",
"Nice",
"Marseilles",
"Cannes"
],
"name": "France"
}
}
Criação do banco de dados, tabela e warehouse virtual¶
Os seguintes comandos criam objetos especificamente para uso com este tutorial. Quando tiver concluído o tutorial, você poderá descartar esses objetos.
create or replace database mydatabase;
use schema mydatabase.public;
create or replace temporary table cities (
continent varchar default null,
country varchar default null,
city variant default null
);
create or replace warehouse mywarehouse with
warehouse_size='X-SMALL'
auto_suspend = 120
auto_resume = true
initially_suspended=true;
use warehouse mywarehouse;
Observe que estes comandos criam uma tabela temporária. Uma tabela temporária existe apenas pela duração da sessão do usuário e não fica visível para os outros usuários.
Etapa 1: criar objetos de formato de arquivo¶
Execute o comando CREATE FILE FORMAT para criar o formato de arquivo sf_tut_parquet_format
.
CREATE OR REPLACE FILE FORMAT sf_tut_parquet_format
TYPE = parquet;
TYPE = 'parquet'
indica o tipo de formato do arquivo de origem. CSV é o tipo de formato de arquivo padrão.
Etapa 2: criar objeto de preparação¶
Execute o comando CREATE STAGE para criar o estágio sf_tut_stage
interno.
CREATE OR REPLACE TEMPORARY STAGE sf_tut_stage
FILE_FORMAT = sf_tut_parquet_format;
Assim como as tabelas temporárias, os estágios temporários são automaticamente descartados ao final da sessão.
Etapa 3: preparar arquivo de dados¶
Execute o comando PUT para carregar o arquivo Parquet de seu sistema de arquivos local no estágio nomeado.
Linux ou macOS
PUT file:///tmp/load/cities.parquet @sf_tut_stage;
Windows
PUT file://C:\temp\load\cities.parquet @sf_tut_stage;
Etapa 4: copiar dados na tabela de destino¶
Copie o arquivo de dados preparado cities.parquet
na tabela CITIES
.
copy into cities
from (select $1:continent::varchar,
$1:country:name::varchar,
$1:country:city::variant
from @sf_tut_stage/cities.parquet);
Observe o seguinte:
$1
na consulta SELECT refere-se à coluna única na qual os dados Parque são armazenados.A consulta converte cada um dos valores do elemento Parquet que ele recupera em tipos de coluna específicos.
Execute a seguinte consulta para verificar se os dados foram copiados.
SELECT * from cities;
A consulta retorna o seguinte resultado:
+---------------+---------+-----------------+
| CONTINENT | COUNTRY | CITY |
|---------------+---------+-----------------|
| Europe | France | [ |
| | | "Paris", |
| | | "Nice", |
| | | "Marseilles", |
| | | "Cannes" |
| | | ] |
|---------------+---------+-----------------|
| Europe | Greece | [ |
| | | "Athens", |
| | | "Piraeus", |
| | | "Hania", |
| | | "Heraklion", |
| | | "Rethymnon", |
| | | "Fira" |
| | | ] |
|---------------+---------+-----------------|
| North America | Canada | [ |
| | | "Toronto", |
| | | "Vancouver", |
| | | "St. John's", |
| | | "Saint John", |
| | | "Montreal", |
| | | "Halifax", |
| | | "Winnipeg", |
| | | "Calgary", |
| | | "Saskatoon", |
| | | "Ottawa", |
| | | "Yellowknife" |
| | | ] |
+---------------+---------+-----------------+
Etapa 5: descarregar a tabela¶
Descarregue a tabela CITIES
em outro arquivo Parquet.
Nota
Por padrão, o Snowflake otimiza as colunas da tabela em arquivos de dados Parquet descarregados, definindo a menor precisão que aceita todos os valores. Se você preferir um esquema de arquivo de saída consistente determinado pelos tipos de dados de colunas “lógicas” (isto é, os tipos na consulta SQL de descarregamento ou na tabela de origem), defina o parâmetro de sessão ENABLE_UNLOAD_PHYSICAL_TYPE_OPTIMIZATION como FALSE.
copy into @sf_tut_stage/out/parquet_
from (select continent,
country,
c.value::string as city
from cities,
lateral flatten(input => city) c)
file_format = (type = 'parquet')
header = true;
Observe o seguinte:
O
file_format = (type = 'parquet')
especifica o Parquet como o formato do arquivo de dados no estágio. Quando o tipo de arquivo Parquet é especificado, o comandoCOPY INTO <local>
descarrega os dados em uma única coluna por padrão.A opção
header=true
direciona o comando para manter os nomes das colunas no arquivo de saída.Na consulta aninhada SELECT:
A função FLATTEN primeiro nivela os elementos da matriz de colunas
city
em colunas separadas.O modificador LATERAL une a saída da função FLATTEN com informações fora do objeto - neste exemplo,
continent
ecountry
.
Execute a seguinte consulta para verificar se os dados foram copiados no arquivo Parquet preparado.
select t.$1 from @sf_tut_stage/out/ t;
A consulta retorna os seguintes resultados (apenas o resultado parcial é mostrado):
+---------------------------------+
| $1 |
|---------------------------------|
| { |
| "CITY": "Paris", |
| "CONTINENT": "Europe", |
| "COUNTRY": "France" |
| } |
|---------------------------------|
| { |
| "CITY": "Nice", |
| "CONTINENT": "Europe", |
| "COUNTRY": "France" |
| } |
|---------------------------------|
| { |
| "CITY": "Marseilles", |
| "CONTINENT": "Europe", |
| "COUNTRY": "France" |
| } |
+---------------------------------+
Etapa 6: remover arquivos de dados copiados com sucesso¶
Após verificar que copiou com sucesso os dados de seu estágio nas tabelas, você pode remover os arquivos de dados do estágio interno usando o comando REMOVE para salvar no armazenamento de dados.
REMOVE @sf_tut_stage/cities.parquet;
Etapa 7: limpeza¶
Execute os seguintes comandos DROP <objeto> para retornar o sistema ao seu estado antes de iniciar o tutorial:
DROP DATABASE IF EXISTS mydatabase;
DROP WAREHOUSE IF EXISTS mywarehouse;
Descartar o banco de dados remove automaticamente todos os objetos do banco de dados filho, tais como tabelas.