Tabelas de streaming

Uma tabela de streaming é uma tabela Delta com suporte adicional para streaming ou processamento incremental de dados. Uma tabela de streaming pode ser alvo de um ou mais fluxos num pipeline.

Para obter orientações sobre quando usar tabelas de transmissão em fluxo em vez de vistas materializadas ou vistas, consulte O que são pipelines?.

As tabelas de streaming são uma boa opção para a ingestão de dados pelos seguintes motivos:

  • Cada linha de entrada é processada apenas uma vez, o que representa a grande maioria das tarefas de ingestão (ou seja, acrescentando ou atualizando linhas numa tabela).
  • Eles podem lidar com grandes volumes de dados em modo de acréscimo apenas.

As tabelas de streaming são também uma boa escolha para transformações de streaming de baixa latência, pois conseguem raciocinar sobre linhas e janelas de tempo, lidar com grandes volumes de dados e fornecer processamento de baixa latência.

O diagrama seguinte mostra como os fluxos são lidos a partir de fontes de streaming e escrevem incrementalmente numa tabela de streaming dentro de um pipeline.

Diagrama mostrando fontes de streaming S3, Kafka e Pub/Sub ligadas por fluxos individuais que leem novos dados num pipeline contendo uma tabela de streaming.

Em cada atualização, os fluxos associados a uma tabela de streaming leem as informações alteradas em uma fonte de streaming e acrescentam novas informações a essa tabela.

As tabelas de streaming são propriedade de um único pipeline e são atualizadas por ele. Você define explicitamente tabelas de streaming no código-fonte do pipeline. As tabelas definidas por um pipeline não podem ser alteradas ou atualizadas por nenhum outro pipeline. Você pode definir vários fluxos para anexar a uma única tabela de streaming.

O Azure Databricks cria tabelas internas para suportar o processamento de tabelas em streaming. Estas tabelas aparecem em system.information_schema.tables, mas não são visíveis no Explorador de Catálogos ou noutras páginas da interface de utilizador do espaço de trabalho.

Note

Quando crias uma tabela de streaming autónoma, fora de um pipeline Lakeflow, o Azure Databricks cria um pipeline que é usado para atualizar a tabela. Você pode ver o pipeline selecionando Jobs & Pipelines da barra de navegação à esquerda em seu espaço de trabalho. Você pode adicionar a coluna Tipo de pipeline à sua exibição. As tabelas de streaming definidas num pipeline têm um tipo de ETL. As tabelas de transmissão em fluxo independentes são do tipo MV/ST.

Para mais informações sobre fluxos, consulte Carregar e processar dados de forma incremental com fluxos de pipeline do Lakeflow.

Tabelas de streaming para ingestão

As tabelas de streaming são projetadas para fontes de dados somente para adição e processam dados apenas uma vez. Isto torna-os bem adequados para cargas de trabalho de ingestão, onde os dados chegam continuamente e devem ser capturados de forma fiável sem reprocessar registos existentes. O Azure Databricks suporta a ingestão de tabelas de streaming a partir de armazenamento de objetos na nuvem (usando o Auto Loader) e de barramentos de mensagens de streaming como Apache Kafka, Hubs de Eventos do Azure e Google Pub/Sub. Para instruções de ingestão e exemplos de código, veja Carregar dados em pipelines.

Note

Para transmitir dados de origem que mudam ao longo do tempo (por exemplo, registos que são atualizados ou eliminados na fonte), use AUTO CDC para aplicar essas alterações a uma tabela de streaming em vez de as anexar. Ver Alterar captura de dados e instantâneos.

O diagrama a seguir ilustra como funcionam as tabelas de streaming com acréscimo único.

Diagrama que mostra como funcionam os sts só de acréscimo

Uma linha que já tenha sido anexada a uma tabela de streaming não será consultada novamente com atualizações posteriores do pipeline. Se modificar a consulta (por exemplo, de SELECT LOWER (name) para SELECT UPPER (name)), as linhas existentes não serão atualizadas para maiúsculas, mas as novas linhas serão maiúsculas. Você pode acionar uma atualização completa para requisitar novamente todos os dados anteriores da tabela de origem, atualizando todas as linhas na tabela de streaming.

Tabelas de streaming e streaming de baixa latência

As tabelas de streaming são projetadas para streaming de baixa latência em estado limitado. As tabelas de streaming usam o gerenciamento de pontos de verificação, o que as torna adequadas para streaming de baixa latência. No entanto, eles esperam fluxos que são naturalmente delimitados ou delimitados com uma marca d'água.

Um fluxo naturalmente limitado é produzido por uma fonte de dados de streaming que tem um início e um fim bem definidos. Um exemplo de um fluxo naturalmente limitado é a leitura de dados de um diretório de arquivos onde nenhum novo arquivo está sendo adicionado depois que um lote inicial de arquivos é colocado. O fluxo é considerado limitado porque o número de ficheiros é finito, e o fluxo termina depois de todos os ficheiros terem sido processados.

Você também pode usar uma marca d'água para delimitar um fluxo. Uma marca d'água no Streaming Estruturado é um mecanismo que ajuda a lidar com dados atrasados ao especificar quanto tempo o sistema deve esperar por eventos atrasados antes de considerar a janela de tempo como completa. Um fluxo não limitado sem marca d'água pode fazer com que um pipeline falhe devido à pressão da memória.

Para cargas de trabalho operacionais que necessitam da menor latência possível, pode executar o pipeline em modo em tempo real para processar registos com latência de ponta a ponta inferior a um segundo.

Para obter mais informações, consulte:

Limitações da tabela de streaming

As tabelas de streaming têm as seguintes limitações:

  • Evolução limitada: você pode alterar a consulta sem recalcular todo o conjunto de dados. Sem uma atualização completa, uma tabela de streaming só vê cada linha uma vez, portanto, consultas diferentes terão processado linhas diferentes. Por exemplo, se adicionares UPPER() a um campo na consulta, só as linhas processadas após a alteração estarão em maiúsculas. Isso significa que você deve estar ciente de todas as versões anteriores da consulta que estão sendo executadas em seu conjunto de dados. Para reprocessar linhas existentes que foram processadas antes da alteração, é necessária uma atualização completa.
  • Gestão de estados: As tabelas de streaming têm baixa latência e requerem fluxos naturalmente delimitados ou delimitados por uma marca de água. Para mais informações, veja Otimizar o processamento com estado usando marcas de água.
  • As junções não são recalculadas: As junções em tabelas de streaming não são recalculadas quando as dimensões mudam. Esta característica pode ser boa para cenários "rápidos, mas errados". Se quiser que a sua vista esteja sempre correta, poderá querer utilizar uma vista materializada. As visualizações materializadas estão sempre corretas porque recalculam automaticamente as junções quando as dimensões mudam. Para obter mais informações, consulte Visões materializadas. Para obter um exemplo de como associar um fluxo a uma tabela de dimensão estática, veja Junções entre fluxos e tabelas estáticas.
  • Sem CLONE suporte: As tabelas de transmissão não podem ser usadas como fonte ou destino de uma clonagem profunda ou superficial. Para outros comandos não suportados, veja Limitações.
  • REFRESH privilégio necessário para visualizar o pipeline: Para visualizar o pipeline subjacente a uma tabela de streaming, um utilizador não administrador necessita do privilégio REFRESH na tabela de streaming, além das permissões no pipeline. Veja Quem pode visualizar um pipeline e a sua saída?.

Recursos adicionais