- Catégories :
GENERATE_COLUMN_DESCRIPTION¶
Génère une liste de colonnes à partir d’un ensemble de fichiers mis en zone de préparation qui contiennent des données semi-structurées en utilisant la sortie de la fonction INFER_SCHEMA.
La sortie de cette fonction peut être utilisée comme entrée lors de la création manuelle d’une table, d’une table externe ou d’une vue (en utilisant la commande CREATE <objet> appropriée) basée sur les définitions de colonnes des fichiers en zone de préparation.
Alternativement, la commande CREATE TABLE avec la clause USING TEMPLATE peut être utilisée pour créer une nouvelle table avec les définitions de colonnes dérivées de la même sortie de fonction INFER_SCHEMA.
Syntaxe¶
GENERATE_COLUMN_DESCRIPTION( <expr> , '<string>' )
Arguments¶
expr
Sortie de la fonction INFER_SCHEMA formatée comme un tableau.
'string'
Type d’objet qui pourrait être créé à partir de la liste de colonnes. Le formatage approprié pour ce type est appliqué à la sortie.
Les valeurs possibles sont les suivantes :
table
,external_table
, ouview
.
Renvoie¶
La fonction renvoie la liste des colonnes dans un ensemble de fichiers en zone de préparation, qui peuvent être utilisés en entrée lors de la création d’un objet du type identifié dans le deuxième argument.
Exemples¶
Détecter, formater et sortir l’ensemble des définitions de colonnes dans un ensemble de fichiers Parquet mis en zone de préparation dans l’étape mystage
. Les colonnes de sortie sont mises en zone de préparation pour la création d’une table.
Cet exemple s’appuie sur un exemple de la rubrique INFER_SCHEMA :
-- Create a file format that sets the file type as Parquet.
CREATE FILE FORMAT my_parquet_format
TYPE = parquet;
-- Query the GENERATE_COLUMN_DESCRIPTION function.
SELECT GENERATE_COLUMN_DESCRIPTION(ARRAY_AGG(OBJECT_CONSTRUCT(*)), 'table') AS COLUMNS
FROM TABLE (
INFER_SCHEMA(
LOCATION=>'@mystage',
FILE_FORMAT=>'my_parquet_format'
)
);
+--------------------+
| COLUMN_DESCRIPTION |
|--------------------|
| "country" VARIANT, |
| "continent" TEXT |
+--------------------+
-- The function output can be used to define the columns in a table.
CREATE TABLE mytable ("country" VARIANT, "continent" TEXT);
Idem que l’exemple précédent, mais génère un ensemble de colonnes formatées pour la création d’une table externe :
-- Query the GENERATE_COLUMN_DESCRIPTION function.
SELECT GENERATE_COLUMN_DESCRIPTION(ARRAY_AGG(OBJECT_CONSTRUCT(*)), 'external_table') AS COLUMNS
FROM TABLE (
INFER_SCHEMA(
LOCATION=>'@mystage',
FILE_FORMAT=>'my_parquet_format'
)
);
+---------------------------------------------+
| COLUMN_DESCRIPTION |
|---------------------------------------------|
| "country" VARIANT AS ($1:country::VARIANT), |
| "continent" TEXT AS ($1:continent::TEXT) |
+---------------------------------------------+
Idem que les exemples précédents, mais génère un ensemble de colonnes formatées pour la création d’une vue :
-- Query the GENERATE_COLUMN_DESCRIPTION function.
SELECT GENERATE_COLUMN_DESCRIPTION(ARRAY_AGG(OBJECT_CONSTRUCT(*)), 'view') AS COLUMNS
FROM TABLE (
INFER_SCHEMA(
LOCATION=>'@mystage',
FILE_FORMAT=>'my_parquet_format'
)
);
+--------------------+
| COLUMN_DESCRIPTION |
|--------------------|
| "country" , |
| "continent" |
+--------------------+
Note
L’utilisation de *
pour ARRAY_AGG(OBJECT_CONSTRUCT())
peut entraîner une erreur si le résultat renvoyé est supérieur à 16MB. Il est recommandé d’éviter d’utiliser *
pour les jeux de résultats plus importants et de n’utiliser que les colonnes nécessaires, COLUMN NAME
, TYPE
, et NULLABLE
, pour la requête. La colonne facultative ORDER_ID
peut être incluse lorsque vous utilisez WITHIN GROUP (ORDER BY order_id)
.