Tipos de dados não estruturados¶
O Snowflake oferece suporte a três tipos diferentes de dados:
Dados estruturados (como um arquivo CSV) seguem um esquema tabular rigoroso. Os dados estruturados podem ser facilmente carregados nas tabelas SQL.
Dados semiestruturados (como um arquivo JSON ou XML) têm um esquema flexível. O Snowflake pode acessar campos em dados semiestruturados usando funções especiais, mas os dados não são tão facilmente consultados quanto os dados estruturados. Os dados semiestruturados podem ser carregados nas tabelas SQL usando as colunas VARIANT.
Dados não estruturados (como um documento, imagem ou arquivo de áudio) não têm um esquema inerente. Os dados não estruturados ainda podem ter uma estrutura interna (por exemplo, os arquivos de imagem PNG devem seguir um formato documentado), mas esses detalhes técnicos geralmente não estão relacionados às informações do arquivo.
O Snowflake oferece maneiras de trabalhar com dados em arquivos não estruturados, como a função AI COMPLETE e Document AI.
Para usar dados não estruturados no Snowflake, eles devem primeiro ser armazenados em um estágio interno ou externo. A função Snowflake que processa os dados não estruturados os lê a partir daí. Dependendo da função, você especifica o arquivo de uma ou mais das seguintes maneiras:
Ao passar um nome de estágio e um caminho relativo para o arquivo como dois argumentos separados para a função que o usará.
Ao passar um URL preparado ou com escopo como uma cadeia de caracteres.
Ao passar um objeto FILE criado usando a função TO_FILE ou TRY_TO_FILE.
Tipo de dados FILE¶
O Snowflake fornece o tipo de dados FILE para dados não estruturados. Um valor FILE representa um arquivo armazenado em um estágio interno ou externo, mas não armazena os dados do arquivo, apenas uma referência a ele. Ele inclui os seguintes metadados:
STAGE: o nome do estágio no qual o arquivo reside.
RELATIVE_PATH: o caminho relativo do arquivo em seu estágio.
STAGE_FILE_URL: o URL do arquivo do estágio.
SCOPED_FILE_URL: o URL do arquivo com escopo.
CONTENT_TYPE: o tipo MIME do arquivo.
SIZE: o tamanho, em bytes, do arquivo.
ETAG: um hash exclusivo do conteúdo do arquivo.
LAST_MODIFIED: o carimbo de data/hora em que o arquivo foi modificado pela última vez.
Nem todos esses campos são obrigatórios. Um FILE deve ter os campos CONTENT_TYPE, SIZE, ETAG e LAST_MODIFIED e também o local do arquivo especificado por STAGE mais RELATIVE_PATH, STAGE_FILE_URL ou SCOPED_FILE_URL.
Você pode criar um arquivo passando um URL de arquivo com escopo, um estágio e um caminho ou um objeto de metadados para a função TO_FILE ou TRY_TO_FILE.
Funções FILE¶
Subcategoria |
Função |
---|---|
Construtores |
|
Acessadores |
|
Função de utilitário |
|
Notas de uso¶
Os valores FILE podem se tornar inconsistentes com os arquivos subjacentes preparados. Os valores FILE não são atualizados quando você modifica ou exclui o arquivo subjacente. Por outro lado, se um valor FILE for excluído de uma tabela, o arquivo subjacente não será afetado.
As permissões nos arquivos subjacentes são regidas pelo tipo de URL que foi especificado ao criar o FILE. URLs de arquivos de estágio e combinações de estágio/caminho dão permissão permanente aos chamadores que têm acesso ao estágio associado. URLs com escopo dão acesso temporário baseado no usuário ao arquivo subjacente por um período de 24 horas.
Uso de dados não estruturados no Snowflake via SQL¶
Crie uma tabela com uma coluna FILE.
CREATE TABLE images_table(img FILE);
Carregue dados na tabela a partir de um estágio externo my_images
que contenha arquivos de imagem. mpy_images
pode ser um estágio interno ou externo.
Nota
Esse processo requer o suporte da tabela de diretório no estágio. Ative-o, se necessário, usando o SQL abaixo:
ALTER STAGE my_images DIRECTORY=(ENABLE=true);
Carregue dados na tabela Snowflake.
INSERT INTO images_table
SELECT TO_FILE(file_url) FROM DIRECTORY(@my_images);
Execute as instruções SQL em images_table
. Por exemplo, a consulta a seguir retorna o caminho relativo de cada arquivo na tabela que foi modificado pela última vez entre 1º de janeiro de 2021 e 1º de janeiro de 2023.
SELECT FL_GET_RELATIVE_PATH(f)
FROM images_table
WHERE FL_GET_LAST_MODIFIED(f) BETWEEN '2021-01-01' and '2023-01-01';
Limitações conhecidas¶
O tipo de dados FILE não pode ser usado no momento:
Cláusulas CLUSTER BY, GROUP BY e ORDER BY
Tabelas híbridas, tabelas Iceberg e tabelas externas
SnowScript
Exibições seguras
Vinculações
Otimização de pesquisa
Clientes e conectores, exceto o Snowpark Python