Kategorien:

Metadatenfunktionen

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>' )
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, 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                      |
+---------------------------------------------+
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 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.