カテゴリ:

メタデータ関数

GENERATE_COLUMN_DESCRIPTION

INFER_SCHEMA 関数の出力を使用して、半構造化データを含む一連のステージングされたファイルから列のリストを生成します。

この関数の出力は、ステージングされたファイルの列定義に基づいて、テーブル、外部テーブル、 Apache Iceberg™ テーブル、またはビューを(適切な CREATE <オブジェクト> コマンドを使用して)手動で作成する際の入力として使用できます。

あるいは、 CREATE TABLE または CREATE ICEBERG TABLE コマンドに USING TEMPLATE 句を付加して、同じ INFER_SCHEMA 関数の出力から列定義を取得して、新しいテーブルを作成するために使用できます。

構文

GENERATE_COLUMN_DESCRIPTION( <expr> , '<string>' )
Copy

引数

expr

配列としてフォーマットされた INFER_SCHEMA 関数の出力。

'string'

列リストから作成できるオブジェクトの型。この型に適したフォーマットが出力に適用されます。

可能な値は、 tableexternal_table、または view です。

戻り値

この関数は、ステージングされたファイルのセットに列リストを返します。これは、2番目の引数で識別される型のオブジェクトを作成するときに入力として使用できます。

mystage ステージでステージングされたParquetファイルのセットにある、列定義のセットを検出、フォーマット、および出力します。出力列は、テーブルを作成するためにフォーマットされます。

この例は、 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);
Copy

前の例と同じですが、外部テーブルを作成するためにフォーマットされた列のセットを生成します。

-- 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

前の例と同じですが、Icebergテーブルを作成するためにフォーマットされた列のセットを生成します。

-- 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

前の例と同じですが、ビューを作成するためにフォーマットされた列のセットを生成します。

-- 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

注釈

ARRAY_AGG(OBJECT_CONSTRUCT()) に対して * を使用すると、返される結果が 16MB より大きいとエラーになる場合があります。大きなクエリ結果セットの場合は * の使用を避け、必要な列、 COLUMN NAMETYPENULLABLE のみをクエリに使用することをお勧めします。 WITHIN GROUP (ORDER BY order_id) を使用する場合は、オプションの列 ORDER_ID を含めることができます。