Kategorien:

Metadaten-Funktionen

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>' )
Copy

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 oder view.

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

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)    |
+---------------------------------------------+
Copy

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

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.