- カテゴリ:
GENERATE_COLUMN_DESCRIPTION¶
INFER_SCHEMA 関数の出力を使用して、半構造化データを含む一連のステージングされたファイルから列のリストを生成します。
この関数の出力は、ステージングされたファイルの列定義に基づいて、テーブル、外部テーブル、 Apache Iceberg™ テーブル、またはビューを(適切な CREATE <オブジェクト> コマンドを使用して)手動で作成する際の入力として使用できます。
あるいは、 CREATE TABLE または CREATE ICEBERG TABLE コマンドに USING TEMPLATE 句を付加して、同じ INFER_SCHEMA 関数の出力から列定義を取得して、新しいテーブルを作成するために使用できます。
構文¶
GENERATE_COLUMN_DESCRIPTION( <expr> , '<string>' )
引数¶
expr
配列としてフォーマットされた INFER_SCHEMA 関数の出力。
'string'
列リストから作成できるオブジェクトの型。この型に適したフォーマットが出力に適用されます。
可能な値は、
table
、external_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);
前の例と同じですが、外部テーブルを作成するためにフォーマットされた列のセットを生成します。
-- 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) | +---------------------------------------------+
前の例と同じですが、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 | +---------------------------------------------+
前の例と同じですが、ビューを作成するためにフォーマットされた列のセットを生成します。
-- 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" | +--------------------+
注釈
ARRAY_AGG(OBJECT_CONSTRUCT())
に *
を使用すると、返される結果が128 MB よりも大きい場合にエラーになる可能性があります。大きな結果セットに対して *
の使用を避け、クエリには必要な列、COLUMN NAME
、TYPE
、NULLABLE
のみを使用します。WITHIN GROUP (ORDER BY order_id)
を使用する場合、オプションの列 ORDER_ID
を含めることができます。