Chargement et déchargement de données Parquet¶
Ce tutoriel décrit comment vous pouvez télécharger des données Parquet en transformant les éléments d’un fichier Parquet en zone de préparation directement en colonnes de table à l’aide de la commande COPY INTO <table>. Le tutoriel décrit également comment vous pouvez utiliser la commande COPY INTO <emplacement> pour décharger les données de la table dans un fichier Parquet.
Dans ce chapitre :
Conditions préalables¶
Pour ce tutoriel, vous devez :
Télécharger un fichier de données Parquet fourni par Snowflake.
Créer une base de données, une table et un entrepôt virtuel.
La base de données, la table et l’entrepôt virtuel sont des objets Snowflake de base nécessaires à la plupart des activités de Snowflake.
Téléchargement du fichier d’échantillon de données¶
Pour télécharger le fichier de données d’exemple Parquet, cliquez sur cities.parquet
. Vous pouvez également cliquer avec le bouton droit de la souris sur le lien et enregistrer le lien/fichier dans votre système de fichiers local.
Le tutoriel suppose que vous avez décompressé les fichiers dans les répertoires suivants :
Linux/macOS :
/tmp/load
Windows :
C:\tempload
Le fichier de données Parquet comprend des exemples de données de continent. Voici un exemple représentatif :
{
"continent": "Europe",
"country": {
"city": [
"Paris",
"Nice",
"Marseilles",
"Cannes"
],
"name": "France"
}
}
Création de la base de données, de la table et de l’entrepôt virtuel¶
Les commandes suivantes créent des objets spécifiquement pour ce tutoriel. Lorsque vous avez terminé le tutoriel, vous pouvez supprimer ces objets.
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;
Notez que ces commandes créent une table temporaire. Des tables temporaires ne persistent que pour la durée de la session utilisateur et ne sont pas visibles pour les autres utilisateurs.
Étape 1 : Création d’un objet de format de fichier¶
Exécutez la commande CREATE FILE FORMAT pour créer le format de fichier sf_tut_parquet_format
.
CREATE OR REPLACE FILE FORMAT sf_tut_parquet_format
TYPE = parquet;
TYPE = 'parquet'
indique le type de format du fichier source. CSV est le type de format de fichier par défaut.
Étape 2 : Création d’un objet de zone de préparation¶
Exécutez la commande CREATE STAGE pour créer la zone de préparation sf_tut_stage
interne.
CREATE OR REPLACE TEMPORARY STAGE sf_tut_stage
FILE_FORMAT = sf_tut_parquet_format;
Comme les tables temporaires, les zones de préparation temporaires sont automatiquement détruites à la fin de la session.
Étape 3 : Mise en zone de préparation du fichier de données¶
Exécutez la commande PUT pour charger le fichier Parquet de votre système de fichiers local vers la zone de préparation nommée.
Linux ou macOS
PUT file:///tmp/load/cities.parquet @sf_tut_stage;
Windows
PUT file://C:\temp\load\cities.parquet @sf_tut_stage;
Étape 4 : Copie des données dans la table cible¶
Copiez le fichier de données en zone de préparation cities.parquet
dans la table CITIES
.
copy into cities
from (select $1:continent::varchar,
$1:country:name::varchar,
$1:country:city::variant
from @sf_tut_stage/cities.parquet);
Remarques :
$1
dans la requête SELECT fait référence à la colonne unique où sont stockées les données Parquet.La requête convertit chacune des valeurs des éléments Parquet qu’elle récupère en types de colonnes spécifiques.
Exécutez la requête suivante pour vérifier que les données sont copiées.
SELECT * from cities;
La requête renvoie le résultat suivant :
+---------------+---------+-----------------+
| 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" |
| | | ] |
+---------------+---------+-----------------+
Étape 5 : Déchargement de la table¶
Déchargez la table CITIES
dans un autre fichier Parquet.
Note
Par défaut, Snowflake optimise les colonnes de la table dans les fichiers de données Parquet en réglant la plus petite précision qui accepte toutes les valeurs. Si vous préférez un schéma de fichier de sortie cohérent déterminé par les types de données de colonne « logique » (c’est-à-dire les types dans la requête de déchargement SQL ou la table source), définissez le paramètre de session ENABLE_UNLOAD_PHYSICAL_TYPE_OPTIMIZATION sur 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;
Remarques :
Le
file_format = (type = 'parquet')
spécifie Parquet comme format du fichier de données sur la zone de préparation. Lorsque le type de fichier Parquet est spécifié, la commandeCOPY INTO <location>
décharge les données par défaut dans une seule colonne.L’option
header=true
indique à la commande de conserver les noms des colonnes dans le fichier de sortie.Dans la requête imbriquée SELECT :
La fonction FLATTEN aplatit d’abord les éléments du tableau de la colonne
city
en colonnes distinctes.Le modificateur LATERAL joint la sortie de la fonction FLATTEN à des informations extérieures à l’objet, dans cet exemple,
continent
etcountry
.
Exécutez la requête suivante pour vérifier que les données sont copiées dans un fichier Parquet en zone de préparation.
select t.$1 from @sf_tut_stage/out/ t;
La requête renvoie les résultats suivants (seul un résultat partiel est affiché) :
+---------------------------------+
| $1 |
|---------------------------------|
| { |
| "CITY": "Paris", |
| "CONTINENT": "Europe", |
| "COUNTRY": "France" |
| } |
|---------------------------------|
| { |
| "CITY": "Nice", |
| "CONTINENT": "Europe", |
| "COUNTRY": "France" |
| } |
|---------------------------------|
| { |
| "CITY": "Marseilles", |
| "CONTINENT": "Europe", |
| "COUNTRY": "France" |
| } |
+---------------------------------+
Étape 6 : Suppression des fichiers de données correctement copiés¶
Après avoir vérifié que vous avez bien copié les données de votre zone de préparation dans les tables, vous pouvez supprimer les fichiers de données de la zone de préparation interne en utilisant la commande REMOVE pour un enregistrement sur le stockage de données.
REMOVE @sf_tut_stage/cities.parquet;
Étape 7 : Nettoyage¶
Exécutez les commandes DROP <objet> suivantes pour remettre votre système dans son état initial avant de commencer le tutoriel :
DROP DATABASE IF EXISTS mydatabase;
DROP WAREHOUSE IF EXISTS mywarehouse;
Détruire la base de données supprime automatiquement toutes les objets de base de données liés, par exemple les tables.