- 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 beim manuellen Erstellen einer Tabelle, einer externen Tabelle oder einer Ansicht (mit dem entsprechenden CREATE <Objekt>-Befehl) auf Basis der Spaltendefinitionen der Stagingdateien verwendet werden.
Alternativ kann der CREATE TABLE-Befehl mit der USING TEMPLATE-Klausel verwendet werden, um eine neue Tabelle mit den Spaltendefinitionen zu erstellen, die von der gleichen 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, 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 als 16 MB ist. Es wird empfohlen, *
bei größeren 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.