Como trabalhar com armazenamento compatível com Amazon S3

O API REST do Amazon Simple Storage Service (S3) permite o acesso programático aos buckets e objetos de armazenamento para executar operações CRUD e várias ações administrativas. Um número crescente de aplicativos e dispositivos de armazenamento têm suas próprias APIs compatíveis com S3. Os recursos do Snowflake que acessam e interagem com o armazenamento S3 também podem funcionar com armazenamento compatível com S3, com algumas limitações.

Para acessar o armazenamento fora da nuvem pública (ou seja, no local ou edge), você pode criar estágios externos no Snowflake que armazenam o ponto de extremidade API, nome e caminho do bucket e as credenciais compatíveis com S3. Conceder privilégios nestes estágios a funções para permitir que os usuários carreguem e descarreguem dados de e para os locais de armazenamento.

Crie tabelas externas nos estágios externos para ampliar seu data lake para incluir este armazenamento.

Neste tópico:

Suporte para a plataforma de nuvem

Este recurso está disponível para contas Snowflake hospedadas em qualquer plataforma em nuvem suportada:

  • Amazon Web Services

  • Google Cloud

  • Microsoft Azure

Requisitos para armazenamento compatível com S3

Um ponto de extremidade do API compatível com S3 deve ser:

  • Altamente compatível com o API do S3. Se o ponto de extremidade não se comportar como S3, ele não poderá funcionar com o Snowflake.

  • Com suporte pelo provedor de armazenamento de terceiros como um serviço Snowflake compatível, testado e em conformidade com S3.

  • Acessível a partir da nuvem pública onde sua conta Snowflake está hospedada.

  • Alta disponibilidade e desempenho para atender às necessidades de análise.

  • Configurado para usar credenciais diretas.

  • Configurado para usar comunicação HTTPS com um certificado TLS válido.

Criação de estágios externos

Crie estágios externos nomeados usando CREATE STAGE. Um objeto de preparação nomeado pode ser usado para listar arquivos, carregar dados e descarregar arquivos, entre outras ações SQL.

Você pode adicionar uma tabela de diretório em qualquer estágio externo que você criar. Consulte uma tabela de diretório para recuperar URLs de arquivo para acessar arquivos no armazenamento referenciado, bem como outros metadados.

Sintaxe

CREATE [ OR REPLACE ] STAGE <external_stage_name>
  URL = 's3compat://{bucket}[/{path}/]'
  ENDPOINT = '<s3_api_compatible_endpoint>'
  CREDENTIALS = ( AWS_KEY_ID = '<string>' AWS_SECRET_KEY = '<string>' )
  ..
Copy

Parâmetros

Esta seção descreve os parâmetros que são específicos de estágios externos que apontam para locais de armazenamento pelos pontos de extremidade compatíveis com S3. Para obter descrições de parâmetros comuns, consulte CREATE STAGE.

URL = 's3compat://bucket[/path/]'

URL do local externo (bucket existente acessado usando um ponto de extremidade compatível com API S3) usado para armazenar arquivos de dados, onde:

  • bucket é o nome do bucket.

  • path é um caminho opcional que diferencia maiúsculas e minúsculas (ou prefixo na terminologia S3) para arquivos no local de armazenamento em nuvem (ou seja, arquivos com nomes que começam com uma cadeia de caracteres comum).

ENDPOINT = 's3_api_compatible_endpoint'

Domínio totalmente qualificado que aponta para o ponto de extremidade de API compatível com S3.

Requisitos de controle de acesso

Uma função usada para executar este comando SQL deve ter os seguintes privilégios no mínimo:

Privilégio

Objeto

Notas

CREATE STAGE

Esquema

Necessário se for criado um novo estágio.

USAGE

Formato do arquivo

Obrigatório somente se fizer referência a um formato de arquivo nomeado na definição do estágio.

Observe que operar em qualquer objeto de um esquema também requer o privilégio USAGE no banco de dados e esquema principais.

Para instruções sobre como criar uma função personalizada com um conjunto específico de privilégios, consulte Criação de funções personalizadas.

Para informações gerais sobre concessões de funções e privilégios para executar ações de SQL em objetos protegíveis, consulte Visão geral do controle de acesso.

Notas de uso

  • O acesso ao armazenamento compatível com S3 exige credenciais diretas.

Exemplos

Criar um estágio externo chamado my_s3compat_stage que aponta para o bucket e caminho my_bucket/files/ no ponto de extremidade mystorage.com:

CREATE STAGE my_s3compat_stage
  URL = 's3compat://my_bucket/files/'
  ENDPOINT = 'mystorage.com'
  CREDENTIALS = (AWS_KEY_ID = '1a2b3c...' AWS_SECRET_KEY = '4x5y6z...')
Copy

Observe que os valores AWS_KEY_ID e AWS_SECRET_KEY utilizados neste exemplo são apenas para fins ilustrativos.

Carregamento e descarregamento de dados

Carregue e descarregue dados usando os estágios externos que você criou em Criação de estágios externos (neste tópico). Os seguintes recursos funcionam com seus estágios externos:

Requisitos de controle de acesso

Uma função usada para carregar ou descarregar dados deve ter, no mínimo, os seguintes privilégios:

Privilégio

Objeto

Notas

USAGE

Estágio

USAGE

Formato do arquivo

Obrigatório apenas se referenciar um formato de arquivo nomeado na instrução COPY INTO <tabela> ou COPY INTO <local>.

INSERT

Tabela

Tabela de origem ou de destino para carregar e descarregar dados.

Observe que operar em qualquer objeto de um esquema também requer o privilégio USAGE no banco de dados e esquema principais.

Ampliação de seu data lake usando tabelas externas

As tabelas externas permitem consultar os dados armazenados no armazenamento externo em nuvem para análise sem primeiro carregá-los no Snowflake.

Criação de tabelas externas

Crie tabelas externas usando CREATE EXTERNAL TABLE que referenciam os estágios externos que você criou em Criação de estágios externos (neste tópico).

Requisitos de controle de acesso

Uma função usada para executar este comando SQL deve ter os seguintes privilégios no mínimo:

Privilégio

Objeto

Notas

CREATE EXTERNAL TABLE

Esquema

USAGE

Estágio

Observe que operar em qualquer objeto de um esquema também requer o privilégio USAGE no banco de dados e esquema principais.

Notas de uso

  • Os metadados para estas tabelas externas não podem ser atualizados automaticamente. A configuração do parâmetro AUTO_REFRESH = TRUE não é suportada.

    Você deve atualizar os metadados de suas tabelas externas manualmente. Para obter mais informações, consulte Atualização manual dos metadados de tabela externa (neste tópico).

Exemplos

Crie uma tabela externa chamada et que faça referência ao subcaminho path1 no estágio my_s3compat_stage que você criou. O formato dos arquivos neste subcaminho é Apache Parquet:

CREATE EXTERNAL TABLE et
 LOCATION=@my_s3compat_stage/path1/
 AUTO_REFRESH = FALSE
 REFRESH_ON_CREATE = TRUE
 FILE_FORMAT = (TYPE = PARQUET);
Copy

Atualização manual dos metadados de tabela externa

Execute periodicamente uma instrução ALTER EXTERNAL TABLE … REFRESH para registrar qualquer arquivo adicionado ou removido.

Somente o proprietário da tabela externa (ou seja, a função com o privilégio OWNERSHIP na tabela externa) ou superior pode executar este comando. Observe que operar em qualquer objeto de um esquema também requer o privilégio USAGE no banco de dados e esquema principais.

Consulta de tabelas externas

Após a atualização dos metadados de tabela externa, os usuários podem consultar a tabela externa.

Uma função usada para consultar uma tabela externa deve ter o privilégio USAGE na tabela externa. Observe que operar em qualquer objeto de um esquema também requer o privilégio USAGE no banco de dados e esquema principais.

Por exemplo, consulte as colunas col1 e col2 na tabela externa que você criou:

SELECT col1, col2 FROM et;
Copy

O desempenho das consultas varia dependendo da rede e do aplicativo ou do desempenho do dispositivo.

Suporte ao fornecedor para armazenagem compatível com S3.

Os dispositivos ou aplicativos que possuem um API S3 compatível podem ser usados com o Snowflake. Garantir a conformidade é responsabilidade do provedor de serviços de armazenagem.

Os seguintes fornecedores indicaram à Snowflake que testaram pelo menos alguns de seus produtos e constataram que eles funcionam com o Snowflake:

  • Cloudian

  • Dell

  • Hitachi Content Platform

  • MinIO

  • NetApp (StorageGRID)

  • PureStorage

  • Scality

Esta lista é fornecida apenas por conveniência. Snowflake não testa produtos externos para validar a compatibilidade e não pode corrigir problemas em produtos vendidos por terceiros. Se você tiver dúvidas sobre se ou como seu hardware ou software com um API S3 funciona com o Snowflake, recomendamos que você entre em contato diretamente com o fornecedor.

Teste de seu API compatível com S3

Se você for um desenvolvedor de hardware ou software que possui um API S3, você poderá usar nossa suíte de teste pública (no GitHub) para testar seu S3 API. Este conjunto de testes procura por discrepâncias óbvias entre sua implementação e o que Snowflake espera de S3. Observe que pode haver casos em que os testes não identifiquem incompatibilidade.

Se você for um cliente e deseja testar seus próprios dispositivos, recomendamos que entre em contato com seu fornecedor para realizar estes testes; no entanto, você também pode realizar estes testes públicos em seus dispositivos para avaliar a compatibilidade.