Atualização automática de tabelas de diretório para o armazenamento de blobs do Azure¶
Este tópico fornece instruções para criar tabelas de diretório e atualizar os metadados das tabelas de diretório automaticamente usando notificações da Event Grid do Microsoft Azure para um contêiner Azure. Esta operação sincroniza os metadados com o mais recente conjunto de arquivos associados no estágio externo e caminho, ou seja:
Novos arquivos no caminho são adicionados aos metadados da tabela.
As mudanças nos arquivos do caminho são atualizadas nos metadados da tabela.
Os arquivos que não estão mais no caminho são removidos dos metadados da tabela.
O Snowflake aceita os seguintes tipos de contas de armazenamento de blobs:
Armazenamento de blobs
Data Lake Storage Gen2
Uso geral v2
Observe que somente os eventos Microsoft.Storage.BlobCreated
e Microsoft.Storage.BlobDeleted
acionam atualizações para tabelas de diretório. A adição de novos objetos ao armazenamento de blobs aciona estes eventos. A renomeação de um diretório ou objeto não aciona esses eventos. A Snowflake recomenda que você envie apenas eventos suportados para tabelas de diretório para reduzir custos, ruído de eventos e latência.
O Snowflake suporta as seguintes APIs Microsoft.Storage.BlobCreated
:
CopyBlob
PutBlob
PutBlockList
FlushWithClose
SftpCommit
O Snowflake suporta as seguintes APIs Microsoft.Storage.BlobDeleted
:
DeleteBlob
DeleteFile
SftpRemove
Para contas de armazenamento Data Lake Gen2, os eventos Microsoft.Storage.BlobCreated
são acionados quando os clientes usam as operações CreateFile
e FlushWithClose
. Se o SSH File Transfer Protocol (SFTP) for usado, os eventos Microsoft.Storage.BlobCreated
serão acionados com as operações SftpCreate
e SftpCommit
. Apenas a API SftpCreate
ou CreateFile
não indica a confirmação de um arquivo na conta de armazenamento. Se a mensagem FlushWithClose
ou SftpCommit
não for enviada, o Snowflake não atualiza a tabela de diretório.
Nota
Para executar as tarefas descritas neste tópico, você deve usar uma função que tenha o privilégio CREATE STAGE em um esquema.
Além disso, você deve ter acesso administrativo ao Microsoft Azure. Se você não for um administrador Azure, peça a seu administrador Azure que complete as etapas em Etapa 1: Configurar a assinatura da Event Grid.
Neste tópico:
Suporte para a plataforma de nuvem¶
O disparo de atualizações automatizadas de metadados externos usando mensagens da Event Grid do Azure tem suporte por contas Snowflake hospedadas nas seguintes plataformas de nuvem:
Amazon Web Services (AWS)
Microsoft Azure
As instruções para a configuração deste suporte são idênticas para contas em qualquer uma das plataformas de hospedagem em nuvem.
Configuração de acesso seguro ao armazenamento em nuvem¶
Nota
Se você já configurou o acesso seguro ao container de armazenamento de blobs do Azure que armazena seus arquivos de dados, pode pular esta seção.
Esta seção descreve como configurar um objeto de integração de armazenamento Snowflake para delegar a responsabilidade pela autenticação do armazenamento em nuvem a uma entidade de gerenciamento de identidade e acesso (IAM) do Snowflake.
Nota
Recomendamos esta opção, o que evita a necessidade de fornecer credenciais IAM ao acessar o armazenamento em nuvem. Consulte Configuração de um contêiner Azure para carregamento de dados para opções adicionais de acesso ao armazenamento.
Esta seção descreve como usar integrações de armazenamento para permitir que o Snowflake leia e grave dados em um contêiner Azure referenciado em um estágio externo (Azure). As integrações são objetos Snowflake nomeados e de primeira classe que evitam a necessidade de passar credenciais explícitas de provedores de nuvens, tais como chaves secretas ou tokens de acesso. Os objetos de integração armazenam uma ID de usuário de gerenciamento de identidade e acesso do Azure (IAM) chamada registro de aplicativo. Um administrador em sua organização concede a esse aplicativo as permissões necessárias na conta Azure.
Uma integração também deve especificar contêineres (e caminhos opcionais) que limitam os locais que os usuários podem especificar ao criar estágios externos que utilizam a integração.
Nota
Para completar as instruções desta seção, é necessário obter permissões no Azure para gerenciar as contas de armazenamento. Se você não é um administrador Azure, peça a seu administrador Azure para realizar essas tarefas.
Nesta seção:
Etapa 1: Criar uma integração de armazenamento em nuvem no Snowflake¶
Crie uma integração de armazenamento usando o comando CREATE STORAGE INTEGRATION. Uma integração de armazenamento é um objeto Snowflake que armazena uma entidade de segurança de serviço gerada para seu armazenamento em nuvem Azure, juntamente com um conjunto opcional de locais de armazenamento permitidos ou bloqueados (ou seja, contêineres). Os administradores do provedor de nuvem em sua organização concedem permissões para os locais de armazenamento à entidade de segurança de serviço gerada. Esta opção permite que os usuários evitem fornecer credenciais ao criar estágios ou carregar dados.
Uma única integração de armazenamento pode oferecer suporte a múltiplos estágios externos (ou seja, Azure). O URL na definição do estágio deve estar alinhado aos contêineres Azure (e caminhos opcionais) especificados para o parâmetro STORAGE_ALLOWED_LOCATIONS.
Nota
Somente administradores de conta (usuários com a função ACCOUNTADMIN) ou uma função com o privilégio global CREATE INTEGRATION podem executar este comando SQL.
CREATE STORAGE INTEGRATION <integration_name>
TYPE = EXTERNAL_STAGE
STORAGE_PROVIDER = 'AZURE'
ENABLED = TRUE
AZURE_TENANT_ID = '<tenant_id>'
STORAGE_ALLOWED_LOCATIONS = ('azure://<account>.blob.core.windows.net/<container>/<path>/', 'azure://<account>.blob.core.windows.net/<container>/<path>/')
[ STORAGE_BLOCKED_LOCATIONS = ('azure://<account>.blob.core.windows.net/<container>/<path>/', 'azure://<account>.blob.core.windows.net/<container>/<path>/') ]
Onde:
integration_name
é o nome da nova integração.tenant_id
é a ID de seu locatário do Office 365 ao qual pertencem as contas de armazenamento permitidas e bloqueadas. Uma integração de armazenamento pode autenticar a somente um locatário e, portanto, os locais de armazenamento permitidos e bloqueados devem se referir às contas de armazenamento que pertencem a este locatário.Para encontrar sua ID de locatário, entre no portal Azure e clique em Azure Active Directory » Properties. A ID do locatário é exibida no campo Tenant ID.
container
é o nome de um contêiner Azure que armazena seus arquivos de dados (por exemplo,mycontainer
). Os parâmetros STORAGE_ALLOWED_LOCATIONS e STORAGE_BLOCKED_LOCATIONS permitem ou bloqueiam o acesso a esses contêineres, respectivamente, quando estágios que fazem referência a essa integração são criados ou modificados.path
é um caminho opcional que pode ser usado para fornecer controle granular sobre diretórios lógicos no contêiner.
O exemplo a seguir cria uma integração que limita explicitamente os estágios externos que utilizam a integração para fazer referência a um de dois contêineres ou caminhos. Em uma etapa posterior, criaremos um estágio externo que referencia um desses contêineres e caminhos. Os múltiplos estágios externos que utilizam essa integração podem fazer referência aos contêineres e caminhos permitidos:
CREATE STORAGE INTEGRATION azure_int TYPE = EXTERNAL_STAGE STORAGE_PROVIDER = 'AZURE' ENABLED = TRUE AZURE_TENANT_ID = 'a123b4c5-1234-123a-a12b-1a23b45678c9' STORAGE_ALLOWED_LOCATIONS = ('azure://myaccount.blob.core.windows.net/mycontainer1/mypath1/', 'azure://myaccount.blob.core.windows.net/mycontainer2/mypath2/') STORAGE_BLOCKED_LOCATIONS = ('azure://myaccount.blob.core.windows.net/mycontainer1/mypath1/sensitivedata/', 'azure://myaccount.blob.core.windows.net/mycontainer2/mypath2/sensitivedata/');
Etapa 2: Conceder ao Snowflake acesso aos locais de armazenamento¶
Execute o comando DESCRIBE INTEGRATION para recuperar o URL de consentimento:
DESC STORAGE INTEGRATION <integration_name>;
Onde:
integration_name
é o nome da integração que você criou em Etapa 1: Criar uma integração de armazenamento em nuvem no Snowflake.
Observe os valores nas colunas seguintes:
- AZURE_CONSENT_URL:
URL para a página de solicitação de permissões da Microsoft.
- AZURE_MULTI_TENANT_APP_NAME:
Nome do aplicativo cliente do Snowflake criado para sua conta. Em uma etapa posterior desta seção, você precisará conceder a este aplicativo as permissões necessárias para obter um token de acesso para seus locais de armazenamento permitidos.
Em um navegador da Web, navegue até o URL na coluna AZURE_CONSENT_URL. A página exibe uma página de solicitação de permissões da Microsoft.
Clique no botão Accept. Esta ação permite que a entidade de segurança do serviço Azure criada para sua conta Snowflake tenha um token de acesso em recursos específicos dentro de seu locatário. A obtenção de um token de acesso só tem sucesso se você conceder à entidade de segurança de serviço as permissões apropriadas sobre o contêiner (consulte a próxima etapa).
A página de solicitações de permissão da Microsoft é redirecionada para o site corporativo da Snowflake (snowflake.com).
Faça login no portal do Microsoft Azure.
Navegue até Azure Services » Storage Accounts. Clique no nome da conta de armazenamento à qual você está concedendo acesso à entidade de segurança do serviço Snowflake.
Clique em Access Control (IAM) » Add role assignment.
Selecione a função desejada para conceder à entidade de segurança do serviço Snowflake:
Storage Blob Data Reader
concede acesso somente leitura. Isso permite o carregamento de dados de arquivos preparados na conta de armazenamento.Storage Blob Data Contributor
concede acesso para leitura e gravação. Isso permite carregar ou descarregar dados de ou para arquivos preparados na conta de armazenamento. A função também permite executar o comando REMOVE para remover arquivos preparados na conta de armazenamento.
Pesquise a entidade de segurança do serviço Snowflake. Esta é a identidade na propriedade AZURE_MULTI_TENANT_APP_NAME na saída DESC STORAGE INTEGRATION (na Etapa 1). Pesquise a cadeia de cadeia de caracteres antes do sublinhado na propriedade AZURE_MULTI_TENANT_APP_NAME.
Importante
Pode levar uma hora ou mais para que o Azure crie a entidade de segurança do serviço Snowflake solicitada por meio da página de solicitação da Microsoft nesta seção. Se a entidade de segurança de serviço não estiver disponível imediatamente, recomendamos esperar uma ou duas horas e depois procurar novamente.
Se você excluir a entidade de segurança do serviço, a integração de armazenamento deixa de funcionar.
Clique no botão Review + assign.
Nota
De acordo com a documentação do Microsoft Azure, as atribuições de funções podem levar até cinco minutos para se propagar.
O Snowflake armazena em cache as credenciais temporárias por um período que não pode exceder o tempo de expiração de 60 minutos. Se você revogar o acesso do Snowflake, os usuários podem ser capazes de listar arquivos e carregar dados a partir do local de armazenamento em nuvem até que o cache expire.
Configuração da automação com a Event Grid do Azure¶
Etapa 1: Configurar a assinatura da Event Grid¶
Esta seção descreve como configurar uma assinatura da Event Grid para eventos de armazenamento do Azure usando a CLI do Azure. Para obter mais informações sobre as etapas descritas nesta seção, consulte os seguintes artigos na documentação Azure:
https://docs.microsoft.com/en-us/azure/event-grid/custom-event-to-queue-storage
https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-event-quickstart
Criação de um grupo de recursos¶
Um tópico da Event Grid fornece um ponto de extremidade para onde a origem (ou seja, o armazenamento Azure) envia eventos. Um tópico é usado para uma coleção de eventos relacionados. Os tópicos da Event Grid são recursos do Azure e devem ser colocados em um grupo de recursos do Azure.
Execute o seguinte comando para criar um grupo de recursos:
az group create --name <resource_group_name> --location <location>
Onde:
resource_group_name
é o nome do novo grupo de recursos.location
é a localização, ou região na terminologia Snowflake, de sua conta do armazenamento Azure.
Habilitação do provedor de recursos da Event Grid¶
Execute o seguinte comando para registrar o provedor de recursos da Event Grid. Note que esta etapa só é necessária se você não tiver usado anteriormente a Event Grid com sua conta Azure:
az provider register --namespace Microsoft.EventGrid
az provider show --namespace Microsoft.EventGrid --query "registrationState"
Criação de uma conta de armazenamento para arquivos de dados¶
Execute o seguinte comando para criar uma conta de armazenamento para seus arquivos de dados. Esta conta deve ser de armazenamento de blobs (ou seja, do tipo BlobStorage
) ou GPv2 (ou seja, do tipo StorageV2
), porque somente estes dois tipos de conta suportam mensagens de eventos.
Nota
Se você já tem uma conta de armazenamento de blobs ou GPv2, pode usar essa conta em seu lugar.
Por exemplo, crie uma conta de armazenamento de blobs:
az storage account create --resource-group <resource_group_name> --name <storage_account_name> --sku Standard_LRS --location <location> --kind BlobStorage --access-tier Hot
Onde:
resource_group_name
é o nome do grupo de recursos que você criou em Criação de um grupo de recursos.storage_account_name
é o nome da nova conta de armazenamento.location
é a localização de sua conta de armazenamento Azure.
Criação de uma conta de armazenamento para a fila de armazenamento¶
Execute o seguinte comando para criar uma conta de armazenamento para hospedar sua fila de armazenamento. Esta conta deve ser uma conta GPv2, porque somente este tipo de conta suporta mensagens de eventos para uma fila de armazenamento.
Nota
Se você já tem uma conta GPv2, pode usar essa conta para hospedar tanto seus arquivos de dados quanto sua fila de armazenamento.
Por exemplo, crie uma conta GPv2:
az storage account create --resource-group <resource_group_name> --name <storage_account_name> --sku Standard_LRS --location <location> --kind StorageV2
Onde:
resource_group_name
é o nome do grupo de recursos que você criou em Criação de um grupo de recursos.storage_account_name
é o nome da nova conta de armazenamento.location
é a localização de sua conta de armazenamento Azure.
Criação de uma fila de armazenamento¶
Uma única fila de armazenamento Azure pode coletar as mensagens de eventos para muitas assinaturas da Event Grid. Para um melhor desempenho, o Snowflake recomenda a criação de uma única fila de armazenamento para acomodar todas as suas assinaturas relacionadas ao Snowflake.
Execute o seguinte comando para criar uma fila de armazenamento. Uma fila de armazenamento armazena um conjunto de mensagens, neste caso, mensagens de eventos da Event Grid:
az storage queue create --name <storage_queue_name> --account-name <storage_account_name>
Onde:
storage_queue_name
é o nome da nova fila de armazenamento.storage_account_name
é o nome da conta de armazenamento que você criou em Criação de uma conta de armazenamento para a fila de armazenamento.
Exportação das IDs de conta e fila de armazenamento para referência¶
Execute os seguintes comandos para definir variáveis de ambiente para as IDs de conta e fila de armazenamento que serão solicitadas posteriormente nestas instruções:
Linux ou macOS:
export storageid=$(az storage account show --name <data_storage_account_name> --resource-group <resource_group_name> --query id --output tsv) export queuestorageid=$(az storage account show --name <queue_storage_account_name> --resource-group <resource_group_name> --query id --output tsv) export queueid="$queuestorageid/queueservices/default/queues/<storage_queue_name>"
Windows:
set storageid=$(az storage account show --name <data_storage_account_name> --resource-group <resource_group_name> --query id --output tsv) set queuestorageid=$(az storage account show --name <queue_storage_account_name> --resource-group <resource_group_name> --query id --output tsv) set queueid="%queuestorageid%/queueservices/default/queues/<storage_queue_name>"
Onde:
data_storage_account_name
é o nome da conta de armazenamento que você criou em Criação de uma conta de armazenamento para arquivos de dados.queue_storage_account_name
é o nome da conta de armazenamento que você criou em Criação de uma conta de armazenamento para a fila de armazenamento.resource_group_name
é o nome do grupo de recursos que você criou em Criação de um grupo de recursos.storage_queue_name
é o nome da fila de armazenamento que você criou em Criação de uma fila de armazenamento.
Instalação da extensão da Event Grid¶
Execute o seguinte comando para instalar a extensão da Event Grid para a CLI do Azure:
az extension add --name eventgrid
Criação da assinatura da Event Grid¶
Execute o seguinte comando para criar a assinatura da Event Grid. A assinatura de um tópico informa a Event Grid que eventos rastrear:
Linux ou macOS:
az eventgrid event-subscription create \ --source-resource-id $storageid \ --name <subscription_name> --endpoint-type storagequeue \ --endpoint $queueid \ --advanced-filter data.api stringin CopyBlob PutBlob PutBlockList FlushWithClose SftpCommit DeleteBlob DeleteFile SftpRemove
Windows:
az eventgrid event-subscription create \ --source-resource-id %storageid% \ --name <subscription_name> --endpoint-type storagequeue \ --endpoint %queueid% \ -advanced-filter data.api stringin CopyBlob PutBlob PutBlockList FlushWithClose SftpCommit DeleteBlob DeleteFile SftpRemove
Onde:
storageid
equeueid
são as variáveis de ambiente da ID de conta e fila de armazenamento que você define em Exportação das IDs de conta e fila de armazenamento para referência.subscription_name
é o nome da nova assinatura da Event Grid.
Etapa 2: Criar a integração de notificação¶
A integração de uma notificação é um objeto Snowflake que fornece uma interface entre o Snowflake e um serviço de enfileiramento de mensagens de terceiros, como a Event Grid do Azure.
Nota
Uma única integração de notificação oferece suporte para uma única fila de armazenamento do Azure. A referência à mesma fila de armazenamento em múltiplas integrações de notificação pode resultar na ausência de dados nas tabelas de destino porque as notificações de eventos são divididas entre as integrações de notificação.
Recuperação da URL da fila de armazenamento e da ID do locatário¶
Faça login no portal do Microsoft Azure.
Navegue até Storage account » Queue service » Queues. Registre a URL para a fila que você criou em Criação de uma fila de armazenamento para referência posterior. A URL tem o seguinte formato:
https://<storage_account_name>.queue.core.windows.net/<storage_queue_name>
Navegue até Azure Active Directory » Properties. Registre o valor Tenant ID para referência posterior. A ID do diretório, ou ID do locatário, é necessária para gerar a URL de consentimento que concede ao Snowflake acesso à assinatura da Event Grid.
Criação da integração de notificação¶
Crie uma integração de notificação usando o comando CREATE NOTIFICATION INTEGRATION.
Nota
Somente administradores de conta (usuários com a função ACCOUNTADMIN) ou uma função com o privilégio global CREATE INTEGRATION podem executar este comando SQL.
A entidade de serviço do Azure para integrações de notificação é diferente da entidade de serviço criada para integrações de armazenamento.
CREATE NOTIFICATION INTEGRATION <integration_name>
ENABLED = true
TYPE = QUEUE
NOTIFICATION_PROVIDER = AZURE_STORAGE_QUEUE
AZURE_STORAGE_QUEUE_PRIMARY_URI = '<queue_URL>'
AZURE_TENANT_ID = '<directory_ID>';
Onde:
integration_name
é o nome da nova integração.queue_URL
edirectory_ID
são a URL da fila e a ID de locatário que você registrou em Recuperação da URL da fila de armazenamento e da ID do locatário.
Por exemplo:
CREATE NOTIFICATION INTEGRATION my_notification_int
ENABLED = true
TYPE = QUEUE
NOTIFICATION_PROVIDER = AZURE_STORAGE_QUEUE
AZURE_STORAGE_QUEUE_PRIMARY_URI = 'https://myqueue.queue.core.windows.net/mystoragequeue'
AZURE_TENANT_ID = 'a123bcde-1234-5678-abc1-9abc12345678';
Concessão de acesso à fila de armazenamento ao Snowflake¶
Observe que etapas específicas nesta seção requerem uma instalação local da CLI do Azure.
Execute o comando DESCRIBE INTEGRATION para recuperar o URL de consentimento:
DESC NOTIFICATION INTEGRATION <integration_name>;
Onde:
integration_name
é o nome da integração que você criou em Criação da integração de notificação.
Observe os valores nas colunas seguintes:
- AZURE_CONSENT_URL:
URL para a página de solicitação de permissões da Microsoft.
- AZURE_MULTI_TENANT_APP_NAME:
Nome do aplicativo cliente do Snowflake criado para sua conta. Em uma etapa posterior desta seção, você precisará conceder a este aplicativo as permissões necessárias para obter um token de acesso para seu tópico permitido.
Em um navegador da Web, navegue até o URL na coluna AZURE_CONSENT_URL. A página exibe uma página de solicitação de permissões da Microsoft.
Clique no botão Accept. Esta ação permite que a entidade de segurança do serviço Azure criada para sua conta Snowflake obtenha um token de acesso a qualquer recurso dentro de seu locatário. A obtenção de um token de acesso só tem sucesso se você conceder à entidade de segurança de serviço as permissões apropriadas sobre o contêiner (consulte a próxima etapa).
A página de solicitações de permissão da Microsoft é redirecionada para o site corporativo da Snowflake (snowflake.com).
Faça login no portal do Microsoft Azure.
Navegue até Azure Active Directory » Enterprise applications. Verifique se o identificador do aplicativo Snowflake que você registrou na Etapa 2 nesta seção está listado.
Importante
Se você excluir o aplicativo Snowflake no Azure Active Directory posteriormente, a integração da notificação deixa de funcionar.
Navegue até Queues »
storage_queue_name
, ondestorage_queue_name
é o nome da fila de armazenamento que você criou em Criação de uma fila de armazenamento.Clique em Access Control (IAM) » Add role assignment.
Pesquise a entidade de segurança do serviço Snowflake. Esta é a identidade na propriedade AZURE_MULTI_TENANT_APP_NAME na saída DESC NOTIFICATION INTEGRATION (na Etapa 1). Pesquise a cadeia de cadeia de caracteres antes do sublinhado na propriedade AZURE_MULTI_TENANT_APP_NAME.
Importante
Pode levar uma hora ou mais para que o Azure crie a entidade de segurança do serviço Snowflake solicitada por meio da página de solicitação da Microsoft nesta seção. Se a entidade de segurança de serviço não estiver disponível imediatamente, recomendamos esperar uma ou duas horas e depois procurar novamente.
Se você excluir a entidade de segurança do serviço, a integração da notificação deixa de funcionar.
Conceda ao aplicativo Snowflake as seguintes permissões:
Role: Colaborador de dados da fila de armazenamento
Assign access to: Usuário, grupo ou entidade de segurança do Azure AD
Select: O valor
appDisplayName
.
O identificador do aplicativo Snowflake deve agora estar listado em Storage Queue Data Contributor (na mesma caixa de diálogo).
Etapa 3: criar um estágio com uma tabela de diretório incluída¶
Crie um estágio externo que referencie seu contêiner Azure usando o comando CREATE STAGE. O Snowflake lê seus arquivos de dados preparados nos metadados da tabela de diretório. Você também pode usar um estágio externo já existente.
Nota
Para configurar o acesso seguro ao local de armazenamento na nuvem, consulte Configuração de acesso seguro ao armazenamento em nuvem (neste tópico).
Para fazer referência a uma integração de armazenamento na instrução CREATE STAGE, a função deve ter o privilégio USAGE para o objeto de integração de armazenamento.
-- External stage
CREATE [ OR REPLACE ] [ TEMPORARY ] STAGE [ IF NOT EXISTS ] <external_stage_name>
<cloud_storage_access_settings>
[ FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ formatTypeOptions ] } ) ]
[ directoryTable ]
[ COPY_OPTIONS = ( copyOptions ) ]
[ COMMENT = '<string_literal>' ]
Onde:
directoryTable (for Microsoft Azure) ::= [ DIRECTORY = ( ENABLE = { TRUE | FALSE } [ AUTO_REFRESH = { TRUE | FALSE } ] [ NOTIFICATION_INTEGRATION = '<notification_integration_name>' ] ) ]
Parâmetros da tabela de diretório (directoryTable
)¶
ENABLE = TRUE | FALSE
Especifica se deve ser adicionada uma tabela de diretório ao estágio. Quando o valor é TRUE, uma tabela de diretório é criada com o estágio.
Padrão:
FALSE
AUTO_REFRESH = TRUE | FALSE
Especifica se o Snowflake deve permitir acionar atualizações automáticas dos metadados da tabela de diretório quando os arquivos de dados novos ou atualizados estiverem disponíveis no estágio externo nomeado especificado na configuração de
[ WITH ] LOCATION =
.TRUE
O Snowflake permite acionar a atualização automática dos metadados da tabela de diretório.
FALSE
O Snowflake não permite acionar atualizações automáticas dos metadados da tabela de diretório. Você deve atualizar manualmente os metadados da tabela de diretório periodicamente usando ALTER STAGE … REFRESH para sincronizar os metadados com a lista atual de arquivos no caminho do estágio.
Padrão:
FALSE
Microsoft Azure
NOTIFICATION_INTEGRATION = '<nome_integração_notificação>'
Especifica o nome da integração da notificação usada para atualizar automaticamente os metadados da tabela de diretório usando as notificações de Event Grid do Azure. Uma integração de notificação é um objeto Snowflake que fornece uma interface entre o Snowflake e serviços de enfileiramento de mensagens de terceiros.
O exemplo a seguir cria um estágio chamado mystage
no esquema ativo para a sessão do usuário. O URL de armazenamento em nuvem inclui o caminho files
. O estágio faz referência a uma integração de armazenamento chamada my_storage_int
.
USE SCHEMA mydb.public;
CREATE STAGE mystage
URL='azure://myaccount.blob.core.windows.net/load/files/'
STORAGE_INTEGRATION = my_storage_int
DIRECTORY = (
ENABLE = true
AUTO_REFRESH = true
NOTIFICATION_INTEGRATION = 'MY_NOTIFICATION_INT'
);
Nota
Use o ponto de extremidade
blob.core.windows.net
para todos os tipos com suporte de contas de armazenamento de blobs Azure, incluindo Data Lake Storage Gen2.O local de armazenamento no valor de URL deve terminar em uma barra (
/
).
O parâmetro NOTIFICATION_INTEGRATION faz referência à integração my_notification_int
que você criou na Etapa 2: Criar a integração de notificação. O nome da integração deve ser fornecido em letras maiúsculas.
Quando arquivos de dados novos ou atualizados são adicionados ao local de armazenamento na nuvem, a notificação de evento informa ao Snowflake para verificá-los nos metadados da tabela de diretório.
Etapa 4: atualizar manualmente os metadados da tabela de diretório¶
Atualize os metadados em uma tabela de diretório manualmente usando o comando ALTER STAGE.
Sintaxe¶
ALTER STAGE [ IF EXISTS ] <name> REFRESH [ SUBPATH = '<relative-path>' ]
Onde:
REFRESH
Acessa os arquivos de dados preparados referenciados na definição da tabela de diretório e atualiza os metadados da tabela:
Novos arquivos no caminho são adicionados aos metadados da tabela.
As mudanças nos arquivos do caminho são atualizadas nos metadados da tabela.
Os arquivos que não estão mais no caminho são removidos dos metadados da tabela.
Atualmente, é necessário executar este comando cada vez que arquivos são adicionados ao estágio, atualizados ou descartados. Esta etapa sincroniza os metadados com o último conjunto de arquivos associados na definição do estágio para a tabela de diretório.
SUBPATH = '<relative-path>'
Opcionalmente, especifique um caminho relativo para atualizar os metadados de um subconjunto específico dos arquivos de dados.
Exemplos¶
Atualizar manualmente os metadados da tabela de diretório em um estágio chamado mystage
:
ALTER STAGE mystage REFRESH;
Importante
Se esta etapa não for concluída com sucesso pelo menos uma vez após a criação da tabela de diretório, a consulta da tabela de diretório não retornará nenhum resultado até que um evento de notificação acione os metadados da tabela de diretório para serem atualizados automaticamente pela primeira vez.
Etapa 5: configurar a segurança¶
Para cada função adicional que será usada para consultar a tabela de diretório, conceda privilégios suficientes de controle de acesso para os vários objetos (ou seja, bancos de dados, esquemas, estágio e tabela) usando GRANT <privilégios>:
Objeto |
Privilégio |
Notas |
---|---|---|
Banco de dados |
USAGE |
|
Esquema |
USAGE |
|
Estágio nomeado |
USAGE , READ |
|
Formato de arquivo nomeado |
USAGE |
Opcional; só é necessário se o estágio que você criou fizer referência a um formato de arquivo nomeado. |