Categorias:

Funções de tabela

INFER_SCHEMA

Detecta automaticamente o esquema de metadados do arquivo em um conjunto de arquivos de dados preparados que contêm dados semiestruturados e recupera as definições das colunas.

A função GENERATE_COLUMN_DESCRIPTION se baseia na saída da função INFER_SCHEMA para simplificar a criação de novas tabelas, tabelas externas ou exibições (usando o comando CREATE <objeto> apropriado) com base nas definições das colunas dos arquivos preparados.

O comando CREATE TABLE ou CREATE EXTERNAL TABLE com a cláusula USING TEMPLATE pode ser executado para criar uma nova tabela ou tabela externa com as definições das colunas derivadas da saída da função INFER_SCHEMA.

Nota

Este recurso está atualmente limitado aos arquivos Apache Parquet, Apache Avro e ORC.

Sintaxe

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

Onde:

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

Argumentos

LOCATION => '...'

Nome do estágio interno ou externo onde os arquivos são armazenados. Opcionalmente, inclua um caminho para um ou mais arquivos no local de armazenamento em nuvem; caso contrário, a função INFER_SCHEMA digitaliza arquivos em todos os subdiretórios do estágio:

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

Os arquivos estão no estágio interno nomeado especificado.

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

Os arquivos estão no estágio externo nomeado especificado.

@~[/path][/filename]

Os arquivos estão no estágio para o usuário atual.

Nota

Esta função SQL oferece suporte somente a estágios nomeados (internos ou externos) e estágios do usuário. Ela não oferece suporte aos estágios da tabela.

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

Especifica uma lista de um ou mais arquivos (separados por vírgulas) em um conjunto de arquivos preparados que contêm dados semiestruturados. Os arquivos já devem ter sido preparados no local interno do Snowflake ou no local externo especificado no comando. Se qualquer um dos arquivos especificados não puder ser encontrado, a consulta será abortada.

O número máximo de nomes de arquivos que podem ser especificados é 1.000.

Nota

Somente para estágios externos (Amazon S3, Google Cloud Storage ou Microsoft Azure), o caminho do arquivo é definido concatenando o URL na definição do estágio e a lista de nomes de arquivos resolvidos.

No entanto, o Snowflake não insere um separador implícito entre o caminho e os nomes dos arquivos. Você deve incluir explicitamente um separador (/) no final do URL na definição do estágio ou no início de cada nome de arquivo especificado neste parâmetro.

FILE_FORMAT => '<file_format_name>'

Nome do objeto de formato de arquivo que descreve os dados contidos nos arquivos preparados. Para obter mais informações, consulte CREATE FILE FORMAT.

IGNORE_CASE => TRUE | FALSE

Especifica se os nomes de colunas detectados de arquivos preparados são tratados de forma a diferenciar maiúsculas e minúsculas. Por padrão, o valor é FALSE, o que significa que Snowflake preserva a caixa de caracteres alfabéticos ao obter nomes de colunas. Se você especificar o valor como TRUE, os nomes de colunas serão tratados de forma a não diferenciar maiúsculas e minúsculas, e todos os nomes de coluna serão obtidos como letras maiúsculas.

Saída

A função retorna as seguintes colunas:

Nome da coluna

Tipo de dados

Descrição

COLUMN_NAME

TEXT

Nome de uma coluna nos arquivos preparados.

TYPE

TEXT

Tipo de dados da coluna.

NULLABLE

BOOLEAN

Especifica se as linhas na coluna podem armazenar NULL em vez de um valor. Atualmente, a nulidade inferida de uma coluna pode se aplicar a um arquivo de dados, mas não a outros no conjunto escaneado.

EXPRESSION

TEXT

Expressão da coluna no formato $1:COLUMN_NAME::TYPE (principalmente para tabelas externas). Se IGNORE_CASE for especificado como TRUE, a expressão da coluna estará no formato GET_IGNORE_CASE ($1, COLUMN_NAME)::TYPE.

FILENAMES

TEXT

Nomes dos arquivos que contêm a coluna.

ORDER_ID

NUMBER

Ordem das colunas nos arquivos preparados.

Exemplos

Recuperar as definições das colunas para os arquivos Parquet no estágio mystage:

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

Similar ao exemplo anterior, mas especifique um único arquivo Parquet no estágio mystage:

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

Obter as definições de coluna para arquivos Parquet no estágio mystage com IGNORE_CASE especificado como TRUE. Na saída retornada, todos os nomes de colunas são obtidos como letras maiúsculas.

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