类别:

元数据函数

GENERATE_COLUMN_DESCRIPTION

使用 INFER_SCHEMA 函数输出,从一组包含半结构化数据的暂存文件中生成列的列表。

根据暂存文件的列定义手动创建表、外部表或视图(使用相应的 CREATE <object> 命令)时,此函数的输出可用作输入。

或者,带 USING TEMPLATE 子句的 CREATE TABLE 命令可用于创建新表,其中包含从同一 INFER_SCHEMA 函数输出派生的列定义。

语法

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

实参

expr

格式化为数组的 INFER_SCHEMA 函数的输出。

'string'

可以从列的列表中创建的对象的类型。此类型的相应格式适用于输出。

可能的值为 tableexternal_tableview

返回

该函数返回一组暂存文件中列的列表,在创建第二个实参中标识的类型的对象时,该列表可用作输入。

示例

检测、格式化和输出在 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

与前面的示例相同,但生成一组经过格式化的列,用于创建视图:

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

备注

如果返回的结果大于 16MB,使用 ARRAY_AGG(OBJECT_CONSTRUCT())* 可能会导致错误。建议避免使用 * 导致较大的结果集,而仅将所需的列 COLUMN NAMETYPENULLABLE 用于查询。使用 WITHIN GROUP (ORDER BY order_id) 时可以包含可选列 ORDER_ID

语言: 中文