Chargement des données JSON vers une table relationnelle

Lorsque vous chargez des données JSON dans une table, vous disposez des options suivantes :

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:\\temp\load

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"
}
Copy

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;
Copy

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éer 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;
Copy

TYPE = 'JSON' indique le type de format du fichier source. CSV est le type de format de fichier par défaut.

Étape 2 : Créer 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;
Copy

Comme les tables temporaires, les zones de préparation temporaires sont automatiquement détruites à la fin de la session.

Étape 3 : Mettre le fichier de données en zone de préparation

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;
    
    Copy
  • Windows

    PUT file://C:\temp\load\sales.json @sf_tut_stage AUTO_COMPRESS=TRUE;
    
    Copy

Étape 4 : Copier les 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';
Copy

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 :

Exécutez la requête suivante pour vérifier que les données sont copiées.

SELECT * from home_sales;
Copy

Étape 5 : Supprimer les fichiers de données copiés avec succè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;
Copy

Étape 6 : Nettoyer

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;
Copy

Détruire la base de données supprime automatiquement toutes les objets de base de données liés, par exemple les tables.