Catégories :

Fonctions de table

INFER_SCHEMA

Détecte automatiquement le schéma de métadonnées de fichier dans un ensemble de fichiers de données mis en zone de préparation qui contiennent des données semi-structurées et récupère les définitions de colonnes.

La fonction GENERATE_COLUMN_DESCRIPTION s’appuie sur la sortie de la fonction INFER_SCHEMA pour simplifier la création de nouvelles tables, de tables externes ou de vues (en utilisant la commande CREATE <objet> appropriée) sur la base des définitions de colonnes des fichiers en zone de préparation.

La commande CREATE TABLE ou CREATE EXTERNAL TABLE avec la clause USING TEMPLATE peut être exécutée pour créer une nouvelle table ou table externe avec les définitions de colonnes dérivées de la sortie de la fonction INFER_SCHEMA.

Note

Cette fonctionnalité est actuellement limitée à Apache Parquet, Apache Avro et aux fichiers ORC.

Syntaxe

INFER_SCHEMA(
  LOCATION => '{ internalStage | externalStage }'
  , FILE_FORMAT => '<file_format_name>'
  , FILES => '<file_name>' [ , '<file_name>' ] [ , ... ]
  , IGNORE_CASE => TRUE | FALSE
)

Où :

internalStage ::=
    @[<namespace>.]<int_stage_name>[/<path>][/<filename>]
  | @~[/<path>][/<filename>]
externalStage ::=
  @[<namespace>.]<ext_stage_name>[/<path>][/<filename>]

Arguments

LOCATION => '...'

Nom de la zone de préparation interne ou externe où les fichiers sont stockés. Vous pouvez inclure un chemin d’accès à un ou plusieurs fichiers dans l’emplacement de stockage dans le Cloud ; sinon, la fonction INFER_SCHEMA analyse les fichiers dans tous les sous-répertoires de la zone de préparation :

@[namespace.]int_stage_name[/path][/filename]

Les fichiers se trouvent dans la zone de préparation interne nommée spécifiée.

@[namespace.]ext_stage_name[/path][/filename]

Les fichiers se trouvent dans la zone de préparation externe nommée spécifiée.

@~[/path][/filename]

Les fichiers sont mis en zone de préparation pour l’utilisateur actuel.

Note

Cette fonction SQL ne prend en charge que les zones de préparation nommées (internes ou externes) et les zones de préparation utilisateur. Elle ne prend pas en charge les zones de préparation de table.

FILES => '<file_name>' [ , '<file_name>' ] [ , ... ]

Spécifie une liste d’un ou plusieurs fichiers (séparés par des virgules) dans un ensemble de fichiers en zone de préparation qui contiennent des données semi-structurées. Les fichiers doivent déjà avoir été mis en zone de préparation dans l’emplacement interne de Snowflake ou dans l’emplacement externe spécifié dans la commande. Si l’un des fichiers spécifiés ne peut être trouvé, la requête sera abandonnée.

Le nombre maximum de noms de fichiers pouvant être spécifiés est de 1 000.

Note

Pour les zones de préparation externes seulement (c.-à-d. Amazon S3, Google Cloud Storage ou Microsoft Azure), le chemin du fichier est défini en concaténant l’URL dans la définition de la zone de préparation et la liste des noms de fichiers résolus.

Cependant, Snowflake n’insère pas implicitement un séparateur entre le chemin et le nom du fichier. Vous devez explicitement inclure un séparateur (/) soit à la fin de l’URL dans la définition de la zone de préparation, soit au début de chaque nom de fichier spécifié dans ce paramètre.

FILE_FORMAT => '<file_format_name>'

Nom de l’objet de format de fichier qui décrit les données contenues dans les fichiers en zone de préparation. Pour plus d’informations, voir CREATE FILE FORMAT.

IGNORE_CASE => TURE | FALSE

Spécifie si les noms de colonnes détectés à partir de fichiers en zone de préparation sont traités en respectant la casse. Par défaut, la valeur est FALSE, ce qui signifie que Snowflake préserve la casse des caractères alphabétiques lors de la récupération des noms de colonnes. Si vous spécifiez la valeur TRUE, les noms de colonnes sont traités sans tenir compte de la casse et tous les noms de colonnes sont récupérés en lettres majuscules.

Sortie

La fonction renvoie les colonnes suivantes :

Nom de la colonne

Type de données

Description

COLUMN_NAME

TEXT

Nom d’une colonne dans les fichiers en zone de préparation.

TYPE

TEXT

Type de données de la colonne.

NULLABLE

BOOLEAN

Spécifie si les lignes de la colonne peuvent stocker NULL au lieu d’une valeur. Actuellement, la nullité déduite d’une colonne peut s’appliquer à un fichier de données, mais pas aux autres dans le jeu analysé.

EXPRESSION

TEXT

Expression de la colonne au format $1:COLUMN_NAME::TYPE (principalement pour les tables externes). Si IGNORE_CASE est défini sur TRUE, l’expression de la colonne sera au format GET_IGNORE_CASE ($1, COLUMN_NAME)::TYPE.

FILENAMES

TEXT

Noms des fichiers qui contiennent la colonne.

Exemples

Récupérez les définitions de colonnes pour les fichiers Parquet dans la zone de préparation mystage :

-- Create a file format that sets the file type as Parquet.
CREATE FILE FORMAT my_parquet_format
  TYPE = parquet;

-- Query the INFER_SCHEMA function.
SELECT *
  FROM TABLE(
    INFER_SCHEMA(
      LOCATION=>'@mystage'
      , FILE_FORMAT=>'my_parquet_format'
      )
    );

+-------------+---------+----------+---------------------+--------------------------+
| COLUMN_NAME | TYPE    | NULLABLE | EXPRESSION          | FILENAMES                |
|-------------+---------+----------+---------------------+--------------------------|
| continent   | TEXT    | True     | $1:continent::TEXT  | geography/cities.parquet |
| country     | VARIANT | True     | $1:country::VARIANT | geography/cities.parquet |
| COUNTRY     | VARIANT | True     | $1:COUNTRY::VARIANT | geography/cities.parquet |
+-------------+---------+----------+---------------------+--------------------------+

Similaire à l’exemple précédent, mais spécifiez un seul fichier Parquet dans la zone de préparation mystage :

-- Query the INFER_SCHEMA function.
SELECT *
  FROM TABLE(
    INFER_SCHEMA(
      LOCATION=>'@mystage/geography/cities.parquet'
      , FILE_FORMAT=>'my_parquet_format'
      )
    );

+-------------+---------+----------+---------------------+--------------------------+
| COLUMN_NAME | TYPE    | NULLABLE | EXPRESSION          | FILENAMES                |
|-------------+---------+----------+---------------------+--------------------------|
| continent   | TEXT    | True     | $1:continent::TEXT  | geography/cities.parquet |
| country     | VARIANT | True     | $1:country::VARIANT | geography/cities.parquet |
| COUNTRY     | VARIANT | True     | $1:COUNTRY::VARIANT | geography/cities.parquet |
+-------------+---------+----------+---------------------+--------------------------+

Récupérez les définitions de colonnes pour les fichiers Parquet dans la zone de préparation mystage avec IGNORE_CASE défini sur TURE. Dans la sortie renvoyée, tous les noms de colonnes sont récupérés en lettres majuscules.

-- Query the INFER_SCHEMA function.
SELECT *
  FROM TABLE(
    INFER_SCHEMA(
      LOCATION=>'@mystage'
      , FILE_FORMAT=>'my_parquet_format'
      , IGNORE_CASE=>TRUE
      )
    );

+-------------+---------+----------+---------------------------------------+--------------------------+
| COLUMN_NAME | TYPE    | NULLABLE | EXPRESSION                            | FILENAMES                |
|-------------+---------+----------+---------------------+--------------------------------------------|
| CONTINENT   | TEXT    | True     | GET_IGNORE_CASE ($1, CONTINENT)::TEXT  | geography/cities.parquet |
| COUNTRY     | VARIANT | True     | GET_IGNORE_CASE ($1, COUNTRY)::VARIANT | geography/cities.parquet |
+-------------+---------+----------+---------------------+--------------------------------------------+
Revenir au début