- Kategorien:
GENERATE_COLUMN_DESCRIPTION¶
Generiert eine Liste von Spalten aus einem Satz von Stagingdateien, die semistrukturierte Daten enthalten, unter Verwendung der INFER_SCHEMA-Funktionsausgabe.
Die Ausgabe dieser Funktion kann als Eingabe verwendet werden, wenn Sie manuell eine Tabelle, eine externe Tabelle, eine Apache Iceberg™-Tabelle oder eine Ansicht (mit dem entsprechenden CREATE <Objekt>-Befehl) auf der Grundlage der Spaltendefinitionen der Stagingdateien erstellen.
Alternativ können Sie auch den Befehl CREATE TABLE oder CREATE ICEBERG TABLE mit der USING TEMPLATE-Klausel verwenden, um eine neue Tabelle mit den Spaltendefinitionen zu erstellen, die von derselben INFER_SCHEMA-Funktionsausgabe abgeleitet sind.
Syntax¶
GENERATE_COLUMN_DESCRIPTION( <expr> , '<string>' )
Argumente¶
expr
Ausgabe der Funktion INFER_SCHEMA, die als Array formatiert ist.
'string'
Typ des Objekts, das aus der Spaltenliste erstellt werden kann. Die passende Formatierung für diesen Typ wird auf die Ausgabe angewendet.
Mögliche Werte sind
table
,external_table
oderview
.
Rückgabewerte¶
Die Funktion gibt die Liste der Spalten in einem Satz von Stagingdateien zurück, die als Eingabe beim Erstellen eines Objekts des im zweiten Argument angegebenen Typs verwendet werden können.
Beispiele¶
Erkennen, Formatieren und Ausgeben des Satzes von Spaltendefinitionen in einem Satz von Parquet-Dateien, die im Stagingbereich mystage
bereitgestellt werden. Die Ausgabespalten werden für die Erstellung einer Tabelle formatiert.
Das folgende Beispiel baut auf einem Beispiel aus dem Thema INFER_SCHEMA auf:
-- 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);
Wie das vorige Beispiel, generiert aber einen Satz von Spalten, die für die Erstellung einer externen Tabelle formatiert sind:
-- 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) |
+---------------------------------------------+
Wie in den vorherigen Beispielen, erzeugt jedoch eine Reihe von Spalten, die für die Erstellung einer Iceberg-Tabelle formatiert sind:
-- Create a file format that sets the file type as Parquet.
CREATE OR REPLACE FILE FORMAT my_parquet_format
TYPE = PARQUET
USE_VECTORIZED_SCANNER = TRUE;
-- Query the GENERATE_COLUMN_DESCRIPTION function.
SELECT GENERATE_COLUMN_DESCRIPTION(ARRAY_AGG(OBJECT_CONSTRUCT(*)), 'table') AS COLUMNS
FROM TABLE (
INFER_SCHEMA(
LOCATION=>'@my_int_stage',
FILE_FORMAT=>'my_parquet_format',
KIND => 'ICEBERG'
)
);
+---------------------------------------------+
| COLUMN_DESCRIPTION |
|---------------------------------------------|
| "id" INT NOT NULL, |
| "custnum" INT NOT NULL |
+---------------------------------------------+
Wie in den vorherigen Beispielen, generiert aber einen Satz von Spalten, die für die Erstellung einer Ansicht formatiert sind:
-- 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" |
+--------------------+
Bemerkung
Die Verwendung von *
für ARRAY_AGG(OBJECT_CONSTRUCT())
kann zu einem Fehler führen, wenn das zurückgegebene Ergebnis größer ist als 16MB. Wir empfehlen, die Verwendung von *
für größere Resultsets zu vermeiden und nur die erforderlichen Spalten COLUMN NAME
, TYPE
und NULLABLE
für die Abfrage zu verwenden. Die optionale Spalte ORDER_ID
kann bei Verwendung von WITHIN GROUP (ORDER BY order_id)
hinzugefügt werden.