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>' )
..
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...')
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:
Carregamento de dados em massa usando o comando COPY INTO <tabela>.
Por exemplo, carregue dados na tabela
t1
de todos os arquivos localizados no subcaminhoload
no bucket e caminho definido no estágiomy_s3compat_stage
que você criou:COPY INTO t1 FROM @my_s3compat_stage/load/;
Chamada dos pontos de extremidade REST do Snowpipe para carregar dados continuamente.
Para obter exemplos de programas, consulte Opção 1: Carregamento de dados usando a API REST Snowpipe.
Descarregamento de dados usando o comando COPY INTO <local>.
Por exemplo, descarregue dados da tabela
t2
em todos os arquivos no subcaminhounload
no bucket e caminho definido no estágiomy_s3compat_stage
que você criou:COPY INTO @my_s3compat_stage/unload/ FROM t2;
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);
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;
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.