カテゴリ:

テーブル関数

INFER_SCHEMA

半構造化データを含む一連のステージングデータファイル内のファイルメタデータスキーマを自動的に検出し、列定義を取得します。

GENERATE_COLUMN_DESCRIPTION 関数は、 INFER_SCHEMA 関数の出力に基づいて構築され、ステージングされたファイルの列定義に基づいて、新しいテーブル、外部テーブル、またはビュー(適切な CREATE <オブジェクト> コマンドを使用)の作成を簡素化します。

USING TEMPLATE 句のある CREATE TABLE または CREATE EXTERNAL TABLE コマンドを実行して、 INFER_SCHEMA 関数の出力から派生した列定義を使用した新しいテーブルまたは外部テーブルを作成することができます。

注釈

この機能は現在、Apache Parquet、Apache Avro、および ORC ファイルに限定されています。

構文

INFER_SCHEMA(
  LOCATION => '{ internalStage | externalStage }'
  , FILE_FORMAT => '<file_format_name>'
  , FILES => '<file_name>' [ , '<file_name>' ] [ , ... ]
  , IGNORE_CASE => TRUE | FALSE
)
Copy

条件:

internalStage ::=
    @[<namespace>.]<int_stage_name>[/<path>][/<filename>]
  | @~[/<path>][/<filename>]
Copy
externalStage ::=
  @[<namespace>.]<ext_stage_name>[/<path>][/<filename>]
Copy

引数

LOCATION => '...'

ファイルが保存される内部ステージまたは外部ステージの名前。必要に応じて、クラウドストレージの場所にある1つ以上のファイルへのパスを含めます。それ以外の場合、 INFER_SCHEMA 関数は、ステージにあるすべてのサブディレクトリ内のファイルをスキャンします。

@[namespace.]int_stage_name[/path][/filename]

ファイルは指定された名前付き内部ステージにあります。

@[namespace.]ext_stage_name[/path][/filename]

ファイルは指定された名前付き外部ステージにあります。

@~[/path][/filename]

ファイルは現在のユーザーのステージにあります。

注釈

この SQL 関数は、名前付きステージ(内部または外部)とユーザーステージのみをサポートします。テーブルステージには対応していません。

FILES => '<file_name>' [ , '<file_name>' ] [ , ... ]

半構造化データを含むステージングされたファイルのセット内にある1つ以上のファイル(コンマで区切られた)のリストを指定します。ファイルは、コマンドで指定されたSnowflake内部の場所または外部の場所のいずれかに既にステージングされている必要があります。指定されたファイルのいずれかが見つからない場合、クエリは中止されます。

指定できるファイル名の最大数は1000です。

注釈

外部ステージのみ(つまり、Amazon S3、Google Cloud Storage、またはMicrosoft Azure)、ステージ定義の URL と解決されたファイル名のリストを連結することにより、ファイルパスが設定されます。

ただし、Snowflakeはパス名とファイル名の間に暗黙的に区切り文字を挿入しません。ステージ定義の URL の末尾、またはこのパラメーターで指定された各ファイル名の先頭のいずれかに明示的に区切り文字(/)を含める必要があります。

FILE_FORMAT => '<file_format_name>'

ステージングされたファイルに含まれるデータを説明するファイル形式オブジェクトの名前。詳細については、 CREATE FILE FORMAT をご参照ください。

IGNORE_CASE => TRUE | FALSE

ステージファイルから検出された列名を大文字と小文字を区別して扱うかどうかを指定します。デフォルトでは、値は FALSE です。これは、Snowflakeが列名を取得するときにアルファベットの大文字と小文字を保持することを意味します。値を TRUE として指定すると、列名で大文字と小文字は区別されず、すべての列名は大文字として取得されます。

出力

この関数は、次の列を返します。

列名

データ型

説明

COLUMN_NAME

TEXT

ステージングされたファイルの列の名前。

TYPE

TEXT

列のデータ型。

NULLABLE

BOOLEAN

列の行が、値の代わりに NULL を保存できるかどうかを指定します。現在、列の推定NULL可能性は、スキャンされたセット内の1つのデータファイルに適用できますが、他のファイルには適用できません。

EXPRESSION

TEXT

$1:COLUMN_NAME::TYPE 形式の列の式(主に外部テーブル用)。IGNORE_CASE が TRUE として指定されている場合、列の式は GET_IGNORE_CASE ($1, COLUMN_NAME)::TYPE の形式になります。

FILENAMES

TEXT

列を含むファイルの名前。

ORDER_ID

NUMBER

ステージングされたファイルの列の順序。

mystage ステージでParquetファイルの列定義を取得します。

-- Create a file format that sets the file type as Parquet.
CREATE FILE FORMAT my_parquet_format
  TYPE = parquet;

-- Query the INFER_SCHEMA function.
SELECT *
  FROM TABLE(
    INFER_SCHEMA(
      LOCATION=>'@mystage'
      , FILE_FORMAT=>'my_parquet_format'
      )
    );

+-------------+---------+----------+---------------------+--------------------------+----------+
| COLUMN_NAME | TYPE    | NULLABLE | EXPRESSION          | FILENAMES                | ORDER_ID |
|-------------+---------+----------+---------------------+--------------------------|----------+
| continent   | TEXT    | True     | $1:continent::TEXT  | geography/cities.parquet | 0        |
| country     | VARIANT | True     | $1:country::VARIANT | geography/cities.parquet | 1        |
| COUNTRY     | VARIANT | True     | $1:COUNTRY::VARIANT | geography/cities.parquet | 2        |
+-------------+---------+----------+---------------------+--------------------------+----------+
Copy

前の例と似ていますが、 mystage ステージで単一のParquetファイルを指定します。

-- Query the INFER_SCHEMA function.
SELECT *
  FROM TABLE(
    INFER_SCHEMA(
      LOCATION=>'@mystage/geography/cities.parquet'
      , FILE_FORMAT=>'my_parquet_format'
      )
    );

+-------------+---------+----------+---------------------+--------------------------+----------+
| COLUMN_NAME | TYPE    | NULLABLE | EXPRESSION          | FILENAMES                | ORDER_ID |
|-------------+---------+----------+---------------------+--------------------------|----------+
| continent   | TEXT    | True     | $1:continent::TEXT  | geography/cities.parquet | 0        |
| country     | VARIANT | True     | $1:country::VARIANT | geography/cities.parquet | 1        |
| COUNTRY     | VARIANT | True     | $1:COUNTRY::VARIANT | geography/cities.parquet | 2        |
+-------------+---------+----------+---------------------+--------------------------+----------+
Copy

IGNORE_CASE が TRUE として指定されている mystage ステージにあるParquetファイルの列定義を取得します。返される出力では、すべての列名が大文字として取得されます。

-- Query the INFER_SCHEMA function.
SELECT *
  FROM TABLE(
    INFER_SCHEMA(
      LOCATION=>'@mystage'
      , FILE_FORMAT=>'my_parquet_format'
      , IGNORE_CASE=>TRUE
      )
    );

+-------------+---------+----------+----------------------------------------+--------------------------+----------+
| COLUMN_NAME | TYPE    | NULLABLE | EXPRESSION                             | FILENAMES                | ORDER_ID |
|-------------+---------+----------+---------------------+---------------------------------------------|----------+
| CONTINENT   | TEXT    | True     | GET_IGNORE_CASE ($1, CONTINENT)::TEXT  | geography/cities.parquet | 0        |
| COUNTRY     | VARIANT | True     | GET_IGNORE_CASE ($1, COUNTRY)::VARIANT | geography/cities.parquet | 1        |
+-------------+---------+----------+---------------------+---------------------------------------------+----------+
Copy