Carregar dados usando tabelas de streaming no Databricks SQL

Importante

Esse recurso está em uma versão prévia. Para se inscrever para o acesso, preencha este formulário.

O Databricks recomenda usar tabelas de streaming para ingerir dados usando o Databricks SQL. Uma tabela de streaming é uma tabela do Catálogo do Unity com suporte extra para streaming ou processamento de dados incremental. Um pipeline DLT é criado automaticamente para cada tabela de streaming. Você pode usar tabelas de streaming para carregamento incremental de dados do Kafka e do armazenamento de objetos de nuvem.

Este artigo demonstra o uso de tabelas de streaming para carregar dados do armazenamento de objetos de nuvem configurados como um volume do Catálogo do Unity (recomendado) ou local externo.

Observação

Para saber como usar as tabelas do Delta Lake como fontes e coletores de streaming, consulte Leituras e gravações de streaming da tabela do Delta.

Antes de começar

Antes de começar, certifique-se de que você tenha o seguinte:

  • Uma conta do Azure Databricks sem servidor habilitada. Para obter mais informações, consulte Habilitar SQL warehouses sem servidor.

  • Um workspace com o Catálogo do Unity habilitado. Para obter mais informações, confira Configurar e gerenciar o Catálogo do Unity.

  • Um SQL warehouse que usa o canal Current.

  • Para consultar tabelas de streaming criadas por um pipeline do Delta Live Tables, você deve usar uma computação compartilhada usando o Databricks Runtime 13.3 LTS e versões superiores ou um SQL Warehouse. As tabelas de streaming criadas em um pipeline habilitado para o Catálogo do Unity não podem ser consultadas a partir de clusters atribuídos ou sem isolamento.

  • O privilégio READ FILES em um local externo do Catálogo do Unity. Para obter informações, confira Criar um local externo para conectar o armazenamento em nuvem ao Azure Databricks.

  • O privilégio USE CATALOG no catálogo no qual você cria a tabela de streaming.

  • O privilégio USE SCHEMA no esquema no qual você cria a tabela de streaming.

  • O privilégio CREATE TABLE no esquema no qual você cria a tabela de streaming.

  • O caminho para os dados de origem.

    Exemplo de caminho de volume: /Volumes/<catalog>/<schema>/<volume>/<path>/<file-name>

    Exemplo de caminho de local externo: abfss://myContainer@myStorageAccount.dfs.core.windows.net/analysis

    Observação

    Este artigo pressupõe que os dados que você deseja carregar estão em um local de armazenamento em nuvem que corresponde a um volume do Catálogo do Unity ou ao local externo ao qual você tem acesso.

Descobrir e visualizar dados de origem

  1. Na barra lateral do workspace, clique em Consultas e clique em Criar consulta.

  2. No editor de consultas, selecione um SQL warehouse que usa o canal Current na lista suspensa.

  3. Cole o seguinte no editor, substituindo valores em colchetes angulares (<>) pelas informações que identificam seus dados de origem e clique em Executar.

    Observação

    Você poderá encontrar erros de inferência de esquema ao executar a função read_files com valor de tabela se os padrões para a função não puderem analisar seus dados. Por exemplo, talvez seja necessário configurar o modo de várias linhas para arquivos CSV ou JSON de várias linhas. Para obter uma lista de opções de analisador, consulte Função com valor de tabela read_files.

    /* Discover your data in a volume */
    LIST "/Volumes/<catalog>/<schema>/<volume>/<path>/<folder>"
    
    /* Preview your data in a volume */
    SELECT * FROM read_files("/Volumes/<catalog>/<schema>/<volume>/<path>/<folder>") LIMIT 10
    
    /* Discover your data in an external location */
    LIST "abfss://<container>@<storage-account>.dfs.core.windows.net/<path>/<folder>"
    
    /* Preview your data */
    SELECT * FROM read_files("abfss://<container>@<storage-account>.dfs.core.windows.net/<path>/<folder>") LIMIT 10
    

Carregar dados em uma tabela de streaming

Para criar uma tabela de streaming com base em dados no armazenamento de objetos de nuvem, cole o seguinte no editor de consultas e clique em Executar:

/* Load data from a volume */
CREATE OR REFRESH STREAMING TABLE <table-name> AS
SELECT * FROM STREAM read_files('/Volumes/<catalog>/<schema>/<volume>/<path>/<folder>')

/* Load data from an external location */
CREATE OR REFRESH STREAMING TABLE <table-name> AS
SELECT * FROM STREAM read_files('abfss://<container>@<storage-account>.dfs.core.windows.net/<path>/<folder>')

Atualizar uma tabela de streaming usando um pipeline DLT

Esta seção descreve os padrões para atualizar uma tabela de streaming com os dados mais recentes disponíveis das fontes definidas na consulta.

Operações CREATE para tabelas de streaming usam um warehouse do Databricks SQL para a criação inicial e o carregamento de dados na tabela de streaming. Operações REFRESH para tabelas de streaming usam DLT (Delta Live Tables). Um pipeline DLT é criado automaticamente para cada tabela de streaming. Quando uma tabela de streaming é atualizada, uma atualização para o pipeline DLT é iniciada para processar a atualização.

Depois de executar o comando REFRESH, o link do pipeline DLT será retornado. Você pode usar o link do pipeline DLT para verificar o status da atualização.

Observação

Somente o proprietário da tabela pode atualizar uma tabela de streaming para obter os dados mais recentes. O usuário que cria a tabela é o proprietário e o proprietário não pode ser alterado.

ConsulteO que é o Delta Live Tables?.

Ingerir apenas novos dados

Por padrão, a função read_files lê todos os dados existentes no diretório de origem durante a criação da tabela e processa registros recém-chegados com cada atualização.

Para evitar a ingestão de dados que já existem no diretório de origem no momento da criação da tabela, defina a opção includeExistingFiles como false. Isso significa que somente os dados que chegam ao diretório após a criação da tabela são processados. Por exemplo:

CREATE OR REFRESH STREAMING TABLE my_bronze_table
AS SELECT *
FROM STREAM read_files(
  'abfss://myContainer@myStorageAccount.dfs.core.windows.net/analysis/*/*/*.json',
  includeExistingFiles => false)

Atualizar totalmente uma tabela de streaming

As atualizações completas reprocessam todos os dados disponíveis na origem com a definição mais recente. Não é recomendável chamar atualizações completas em origens que não mantêm todo o histórico dos dados ou têm períodos de retenção curtos, como Kafka, pois a atualização completa trunca os dados existentes. Talvez não seja possível recuperar dados antigos se os dados não estiverem mais disponíveis na origem.

Por exemplo:

REFRESH STREAMING TABLE my_bronze_table FULL

Agendar uma tabela de streaming para atualização automática

Para configurar uma tabela de streaming para atualizar automaticamente com base em um agendamento definido, cole o seguinte no editor de consultas e clique em Executar:

ALTER STREAMING TABLE
[[<catalog>.]<database>.]<name>
ADD [SCHEDULE [REFRESH]
        CRON '<cron-string>'
                [ AT TIME ZONE '<timezone-id>' ]];

Para obter exemplos de consultas de agendamento de atualização, consulte ALTER STREAMING TABLE.

Acompanhar o status de uma atualização

Você pode exibir o status de uma atualização de tabela de streaming visualizando o pipeline que gerencia a tabela de streaming na interface do usuário do Delta Live Tables ou exibindo as Informações de Atualização retornadas pelo comando DESCRIBE EXTENDED da tabela de streaming.

DESCRIBE EXTENDED <table-name>

Ingestão de streaming do Kafka

Para obter um exemplo de ingestão de streaming do Kafka, consulte read_kafka.

Conceder aos usuários acesso a uma tabela de streaming

Para conceder aos usuários o privilégio SELECT na tabela de streaming para que eles possam consultá-la, cole o seguinte no editor de consultas e clique em Executar:

GRANT SELECT ON TABLE <catalog>.<schema>.<table> TO <user-or-group>

Para obter mais informações sobre concessão de privilégios no Catálogo do Unity, confira Privilégios e objetos protegíveis do Catálogo do Unity.

Limitações

  • Não há suporte para as tabelas de streaming de SQL do Databricks nas regiões Centro-Sul dos EUA e Oeste dos EUA 2.

Recursos adicionais