Chargement de données JSON dans une table relationnelle¶
Lorsque vous chargez des données JSON dans une table, vous disposez des options suivantes :
Stockez les objets JSON nativement dans une colonne de type VARIANT (comme indiqué dans Didacticiel : Chargement en masse à partir d’un système de fichiers local à l’aide de COPY).
Stockez nativement l’objet JSON dans une table intermédiaire, puis utilisez la fonction FLATTEN pour extraire les éléments JSON dans des colonnes distinctes d’une table (comme indiqué dans Tutorial : les bases de JSON).
Transformez les éléments JSON directement en colonnes de tableau comme indiqué dans ce tutoriel.
La commande COPY de ce tutoriel utilise une instruction SELECT pour interroger des éléments individuels dans un fichier JSON en zone de préparation.
L’exemple de commandes fourni dans ce tutoriel comprend une instruction PUT. Nous recommandons d’exécuter ces commandes dans SnowSQL qui prend en charge la commande PUT. Les clients tels que Snowsight et Classic Console ne prennent pas en charge la commande PUT.
Dans ce chapitre :
Conditions préalables¶
Pour ce tutoriel, vous devez :
Télécharger un fichier de données fourni par Snowflake JSON.
Créer une base de données, une table et un entrepôt virtuel pour ce tutoriel.
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.
Fichier de données à charger¶
Pour télécharger l’exemple de fichier de données JSON, cliquez sur sales.json </samples/sales.json>. Si cliquer sur le lien ne télécharge pas le fichier, cliquez avec le bouton droit sur le lien et enregistrez le lien/le fichier sur votre système de fichiers local.
Le tutoriel suppose que vous avez décompressé le fichier de données JSON dans les répertoires suivants :
Linux/macOS :
/tmp/load
Windows :
C:\tempload
Le fichier de données comprend des données JSON sur les ventes de maisons types. Un exemple d’objet JSON est présenté :
{
"location": {
"state_city": "MA-Lexington",
"zip": "40503"
},
"sale_date": "2017-3-5",
"price": "275836"
}
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 détruire les objets.
create or replace database mydatabase;
use schema mydatabase.public;
CREATE OR REPLACE TEMPORARY TABLE home_sales (
city STRING,
zip STRING,
state STRING,
type STRING DEFAULT 'Residential',
sale_date timestamp_ntz,
price STRING
);
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_json_format
.
CREATE OR REPLACE FILE FORMAT sf_tut_json_format
TYPE = JSON;
TYPE = 'JSON'
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 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_json_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 JSON de votre système de fichiers local vers la zone de préparation nommée.
Linux ou macOS
PUT file:///tmp/load/sales.json @sf_tut_stage AUTO_COMPRESS=TRUE;
Windows
PUT file://C:\temp\load\sales.json @sf_tut_stage AUTO_COMPRESS=TRUE;
Étape 4 : Copie des données dans la table cible¶
Chargez le fichier de données en zone de préparation sales.json.gz
dans la table home_sales
.
COPY INTO home_sales(city, state, zip, sale_date, price)
FROM (SELECT SUBSTR($1:location.state_city,4),
SUBSTR($1:location.state_city,1,2),
$1:location.zip,
to_timestamp_ntz($1:sale_date),
$1:price
FROM @sf_tut_stage/sales.json.gz t)
ON_ERROR = 'continue';
Notez que le 1 $ dans la requête SELECT fait référence à la colonne unique où est stocké le JSON. La requête utilise également les fonctions suivantes :
La fonction SUBSTR , SUBSTRING pour extraire les valeurs de la ville et de l’état à partir de la clé JSON state_city.
Le TO_TIMESTAMP / TO_TIMESTAMP_* pour convertir la valeur de la clé sale_date JSON en un horodatage.
Exécutez la requête suivante pour vérifier que les données sont copiées.
SELECT * from home_sales;
Étape 5 : 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/sales.json.gz;
Étape 6 : 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.