Compartilhar via


Use o SQL do Databricks em um trabalho Azure Databricks

Você pode usar o tipo de tarefa SQL em um trabalho do Azure Databricks, permitindo a criação, agendamento, operação e monitoramento de fluxos de trabalho que incluem objetos do Databricks SQL, como consultas, painéis herdados e alertas. Por exemplo, seu fluxo de trabalho pode ingerir dados, preparar os dados, executar análises usando consultas do Databricks SQL e exibir os resultados em um painel herdado.

Este artigo fornece um exemplo de fluxo de trabalho que cria um painel herdado exibindo métricas para contribuições do GitHub. Neste exemplo, você vai:

  • Ingerir dados do GitHub usando um script Python e a API REST do GitHub.
  • Transformar os dados do GitHub usando um pipeline do Delta Live Tables.
  • Disparar consultas SQL do Databricks executando análises nos dados preparados.
  • Exiba a análise em um painel herdado.

Painel de análise do GitHub

Antes de começar

Você precisa dos seguintes itens para concluir este passo a passo:

Etapa 1: armazenar o token do GitHub em um segredo.

Em vez de codificar credenciais como o token de acesso pessoal do GitHub em um trabalho, o Databricks recomenda usar um escopo secreto para armazenar e gerenciar segredos com segurança. Os seguintes comandos da CLI do Databricks são um exemplo de criação de um escopo secreto e armazenamento do token GitHub em um segredo nesse escopo:

databricks secrets create-scope <scope-name>
databricks secrets put-secret <scope-name> <token-key> --string-value <token>
  • Substitua <scope-name pelo nome de um escopo de segredo do Azure Databricks para armazenar o token.
  • Substitua <token-key> pelo nome de uma chave a ser atribuída ao token.
  • Substitua <token> pelo valor do seu token de acesso pessoal do GitHub.

Etapa 2: Criar um script para buscar dados do GitHub

O script Python a seguir usa a API REST do GitHub para buscar dados sobre commits e contribuições de um repositório do GitHub. Os argumentos de entrada especificam o repositório GitHub. Os registros são salvos em um local no DBFS especificado por outro argumento de entrada.

Este exemplo usa o DBFS para armazenar o script do Python, mas você também pode usar pastas Git do Databricks ou arquivos de workspace para armazenar e gerenciar o script.

  • Salve esse script em um local no disco local:

    import json
    import requests
    import sys
    
    api_url = "https://api.github.com"
    
    def get_commits(owner, repo, token, path):
      page = 1
      request_url =  f"{api_url}/repos/{owner}/{repo}/commits"
      more = True
    
      get_response(request_url, f"{path}/commits", token)
    
    def get_contributors(owner, repo, token, path):
      page = 1
      request_url =  f"{api_url}/repos/{owner}/{repo}/contributors"
      more = True
    
      get_response(request_url, f"{path}/contributors", token)
    
    def get_response(request_url, path, token):
      page = 1
      more = True
    
      while more:
        response = requests.get(request_url, params={'page': page}, headers={'Authorization': "token " + token})
        if response.text != "[]":
          write(path + "/records-" + str(page) + ".json", response.text)
          page += 1
        else:
          more = False
    
    def write(filename, contents):
      dbutils.fs.put(filename, contents)
    
    def main():
      args = sys.argv[1:]
      if len(args) < 6:
        print("Usage: github-api.py owner repo request output-dir secret-scope secret-key")
        sys.exit(1)
    
      owner = sys.argv[1]
      repo = sys.argv[2]
      request = sys.argv[3]
      output_path = sys.argv[4]
      secret_scope = sys.argv[5]
      secret_key = sys.argv[6]
    
      token = dbutils.secrets.get(scope=secret_scope, key=secret_key)
    
      if (request == "commits"):
        get_commits(owner, repo, token, output_path)
      elif (request == "contributors"):
        get_contributors(owner, repo, token, output_path)
    
    if __name__ == "__main__":
        main()
    
  • Carregue o script no DBFS:

    1. Acesse a página de aterrissagem do Azure Databricks e clique no Ícone de CatálogoCatálogo na barra lateral.
    2. Clique em Procurar DBFS.
    3. No navegador de arquivos DBFS, clique em Carregar. A caixa de diálogo Carregar Dados no DBFS é exibida.
    4. Insira um caminho no DBFS para armazenar o script, clique em Remover arquivos para carregar ou clique para navegar e selecione o script Python.
    5. Clique em Concluído.

Etapa 3: Criar um pipeline do Delta Live Tables para processar os dados do GitHub

Nesta seção, você criará um pipeline do Delta Live Tables para converter os dados brutos do GitHub em tabelas que podem ser analisadas por consultas SQL do Databricks. Para criar o pipeline, execute as seguintes etapas:

  1. Na barra lateral, clique no ícone NovoNovo e selecione Notebook no menu. A caixa de diálogo Criar Notebook será exibida.

  2. Em Idioma Padrão, insira um nome e selecione Python. Mantenha Cluster definido com o valor padrão. O runtime do Delta Live Tables cria um cluster antes de executar o pipeline.

  3. Clique em Criar.

  4. Copie o código de exemplo em Python e cole-o em seu novo notebook. Você pode adicionar o código de exemplo a uma única célula do notebook ou a várias células.

    import dlt
    from pyspark.sql.functions import *
    
    def parse(df):
       return (df
         .withColumn("author_date", to_timestamp(col("commit.author.date")))
         .withColumn("author_email", col("commit.author.email"))
         .withColumn("author_name", col("commit.author.name"))
         .withColumn("comment_count", col("commit.comment_count"))
         .withColumn("committer_date", to_timestamp(col("commit.committer.date")))
         .withColumn("committer_email", col("commit.committer.email"))
         .withColumn("committer_name", col("commit.committer.name"))
         .withColumn("message", col("commit.message"))
         .withColumn("sha", col("commit.tree.sha"))
         .withColumn("tree_url", col("commit.tree.url"))
         .withColumn("url", col("commit.url"))
         .withColumn("verification_payload", col("commit.verification.payload"))
         .withColumn("verification_reason", col("commit.verification.reason"))
         .withColumn("verification_signature", col("commit.verification.signature"))
         .withColumn("verification_verified", col("commit.verification.signature").cast("string"))
         .drop("commit")
       )
    
    @dlt.table(
       comment="Raw GitHub commits"
    )
    def github_commits_raw():
      df = spark.read.json(spark.conf.get("commits-path"))
      return parse(df.select("commit"))
    
    @dlt.table(
      comment="Info on the author of a commit"
    )
    def commits_by_author():
      return (
        dlt.read("github_commits_raw")
          .withColumnRenamed("author_date", "date")
          .withColumnRenamed("author_email", "email")
          .withColumnRenamed("author_name", "name")
          .select("sha", "date", "email", "name")
      )
    
    @dlt.table(
      comment="GitHub repository contributors"
    )
    def github_contributors_raw():
      return(
        spark.readStream.format("cloudFiles")
          .option("cloudFiles.format", "json")
          .load(spark.conf.get("contribs-path"))
      )
    
  5. Na barra lateral, clique em Ícone de fluxos de trabalhoFluxos de Trabalho, clique na guia Delta Live Tables e em Criar pipeline.

  6. Dê um nome ao pipeline, por exemplo, Transform GitHub data.

  7. No campo Bibliotecas de notebooks, insira o caminho para o notebook ou clique em Ícone do Seletor de Arquivos para selecionar o notebook.

  8. Clique em Adicionar configuração. Na caixa de texto Key, insira commits-path. Na caixa de texto Value, insira o caminho DBFS em que os registros do GitHub serão gravados. Esse pode ser qualquer caminho escolhido e é o mesmo caminho que você usará ao configurar a primeira tarefa do Python ao criar o fluxo de trabalho.

  9. Clique novamente em Adicionar Configuração. Na caixa de texto Key, insira contribs-path. Na caixa de texto Value, insira o caminho DBFS em que os registros do GitHub serão gravados. Esse pode ser qualquer caminho escolhido e é o mesmo caminho que você usará ao configurar a segunda tarefa do Python ao criar o fluxo de trabalho.

  10. No campo Destino, insira um banco de dados de destino, por exemplo, github_tables. Definir um banco de dados de destino publica os dados de saída no metastore e é necessário para as consultas downstream que analisam os dados produzidos pelo pipeline.

  11. Clique em Save (Salvar).

Etapa 4: Criar um fluxo de trabalho para ingerir e transformar dados do GitHub

Antes de analisar e visualizar os dados do GitHub com o SQL do Databricks, você precisa ingerir e preparar os dados. Para criar um fluxo de trabalho para concluir essas tarefas, execute as seguintes etapas:

Criar um trabalho do Azure Databricks e adicionar a primeira tarefa

  1. Vá para a página inicial do Azure Databricks e siga um destes procedimentos:

    • Na barra lateral, clique no Ícone de fluxos de trabalhoFluxos de Trabalhos e clique no botão Criar Trabalho.
    • Na barra lateral, clique no ícone NovoNovo e selecione Trabalho no menu.
  2. Na caixa de diálogo da tarefa exibida na guia Tarefas, substitua Adicionar um nome para seu trabalho... com seu nome de trabalho, por exemplo GitHub analysis workflow.

  3. Em Nome da tarefa, insira um nome para a tarefa, por exemplo, get_commits.

  4. Em Tipo, selecione Script do Python.

  5. Em Fonte, selecione DBFS/S3.

  6. Em Caminho, insira o caminho para o script no DBFS.

  7. Em Parâmetros, insira os seguintes argumentos para o script Python:

    ["<owner>","<repo>","commits","<DBFS-output-dir>","<scope-name>","<github-token-key>"]

    • Substitua <owner> pelo nome do proprietário do repositório. Por exemplo, para buscar registros do github.com/databrickslabs/overwatch repositório, insira databrickslabs.
    • Substitua <repo> pelo nome do repositório, por exemplo, overwatch.
    • Substitua <DBFS-output-dir> por um caminho no DBFS para armazenar os registros buscados do GitHub.
    • Substitua <scope-name> pelo nome do escopo do segredo que você criou para armazenar o token do GitHub.
    • Substitua <github-token-key> pelo nome da chave que você atribuiu ao token do GitHub.
  8. Clique em Salvar tarefa.

Adicionar outra tarefa

  1. Clique no botão Adicionar tarefa sob a tarefa recém-criada.

  2. Em Nome da tarefa, insira um nome para a tarefa, por exemplo, get_contributors.

  3. Em Tipo, selecione o tipo de tarefa Script do Python.

  4. Em Fonte, selecione DBFS/S3.

  5. Em Caminho, insira o caminho para o script no DBFS.

  6. Em Parâmetros, insira os seguintes argumentos para o script Python:

    ["<owner>","<repo>","contributors","<DBFS-output-dir>","<scope-name>","<github-token-key>"]

    • Substitua <owner> pelo nome do proprietário do repositório. Por exemplo, para buscar registros do github.com/databrickslabs/overwatch repositório, insira databrickslabs.
    • Substitua <repo> pelo nome do repositório, por exemplo, overwatch.
    • Substitua <DBFS-output-dir> por um caminho no DBFS para armazenar os registros buscados do GitHub.
    • Substitua <scope-name> pelo nome do escopo do segredo que você criou para armazenar o token do GitHub.
    • Substitua <github-token-key> pelo nome da chave que você atribuiu ao token do GitHub.
  7. Clique em Salvar tarefa.

Adicionar uma tarefa para transformar os dados

  1. Clique no botão Adicionar tarefa sob a tarefa recém-criada.
  2. Em Nome da tarefa, insira um nome para a tarefa, por exemplo, transform_github_data.
  3. Em Tipo, selecione Pipeline do Delta Live Tables e insira um nome para a tarefa.
  4. Em Pipeline, selecione o pipeline criado na Etapa 3: criar um pipeline do Delta Live Tables para processar os dados do GitHub.
  5. Clique em Criar.

Etapa 5: Executar o fluxo de trabalho de transformação de dados

Clique no Botão Executar agora para executar o fluxo de trabalho. Para exibir detalhes da execução, clique no link na coluna Hora de início da execução no modo de exibição execuções do trabalho. Clique em cada tarefa para exibir detalhes da execução da tarefa.

Etapa 6: (Opcional) Para exibir os dados de saída após a conclusão da execução do fluxo de trabalho, execute as seguintes etapas:

  1. Na exibição de detalhes da execução, clique na tarefa Delta Live Tables.
  2. No painel Detalhes da execução da tarefa, clique no nome do pipeline em Pipeline. A página Detalhes do Pipeline é exibida.
  3. Selecione a tabela commits_by_author no DAG do pipeline.
  4. Clique no nome da tabela ao lado de Metastore no painel commits_by_author. A página do Explorador de Catálogos é aberta.

No Explorador de Catálogos, você pode exibir o esquema da tabela, os dados de amostra e outros detalhes dos dados. Siga as mesmas etapas para exibir os dados da tabela github_contributors_raw.

Etapa 7: Remover os dados do GitHub

Em um aplicativo do mundo real, você pode estar ingerindo e processando dados continuamente. Como este exemplo baixa e processa todo o conjunto de dados, você deve remover os dados do GitHub já baixados para evitar um erro ao executar novamente o fluxo de trabalho. Para remover os dados baixados, execute as seguintes etapas:

  1. Crie um novo notebook e insira os seguintes comandos na primeira célula:

    dbutils.fs.rm("<commits-path", True)
    dbutils.fs.rm("<contributors-path", True)
    

    Substitua <commits-path> e <contributors-path> pelos caminhos DBFS que você configurou ao criar as tarefas do Python.

  2. Clique em Executar menu e selecione Executar célula.

Você também pode adicionar esse notebook como uma tarefa no fluxo de trabalho.

Etapa 8: Criar as consultas SQL do Databricks

Depois de executar o fluxo de trabalho e criar as tabelas necessárias, crie consultas para analisar os dados preparados. Para criar as consultas e visualizações de exemplo, execute as seguintes etapas:

Exibir os 10 principais colaboradores por mês

  1. Clique no ícone abaixo do logotipo do Databricks logotipo do Databricks na barra lateral e selecione SQL.

  2. Clique em Criar uma consulta para abrir o editor de consultas SQL do Databricks.

  3. Verifique se o catálogo está definido como hive_metastore. Clique em padrão ao lado de hive_metastore e defina o banco de dados como o valor de Destino definido no pipeline do Delta Live Tables.

  4. Na página Nova Consulta, execute a seguinte consulta:

    SELECT
      date_part('YEAR', date) AS year,
      date_part('MONTH', date) AS month,
      name,
      count(1)
    FROM
      commits_by_author
    WHERE
      name IN (
        SELECT
          name
        FROM
          commits_by_author
        GROUP BY
          name
        ORDER BY
          count(name) DESC
        LIMIT 10
      )
      AND
        date_part('YEAR', date) >= 2022
    GROUP BY
      name, year, month
    ORDER BY
      year, month, name
    
  5. Clique na guia Nova consulta e renomeie a consulta, por exemplo, Commits by month top 10 contributors.

  6. Por padrão, os resultados são exibidos como uma tabela. Para alterar como os dados são visualizados, por exemplo, usando um gráfico de barras, no painel Resultados, clique nas Reticências Verticais Trabalhos e clique em Editar.

  7. Em Tipo de visualização, selecione Barra.

  8. Na coluna X, selecione mês.

  9. Nas colunas Y, selecione contagem(1).

  10. Em Agrupar por, selecione nome.

  11. Clique em Save (Salvar).

Exibir os 20 principais colaboradores

  1. Clique em +> Criar nova consulta e verifique se o catálogo está definido como hive_metastore. Clique em padrão ao lado de hive_metastore e defina o banco de dados como o valor de Destino definido no pipeline do Delta Live Tables.

  2. Insira a consulta a seguir:

    SELECT
      login,
      cast(contributions AS INTEGER)
    FROM
      github_contributors_raw
    ORDER BY
      contributions DESC
    LIMIT 20
    
  3. Clique na guia Nova consulta e renomeie a consulta, por exemplo, Top 20 contributors.

  4. Para alterar a visualização da tabela padrão, no painel Resultados, clique em Reticências Verticais Trabalhos e clique em Editar.

  5. Em Tipo de visualização, selecione Barra.

  6. Na coluna X, selecione login.

  7. Em colunas Y, selecione contribuições.

  8. Clique em Save (Salvar).

Exibir o total de commits por autor

  1. Clique em +> Criar nova consulta e verifique se o catálogo está definido como hive_metastore. Clique em padrão ao lado de hive_metastore e defina o banco de dados como o valor de Destino definido no pipeline do Delta Live Tables.

  2. Insira a consulta a seguir:

    SELECT
      name,
      count(1) commits
    FROM
      commits_by_author
    GROUP BY
      name
    ORDER BY
      commits DESC
    LIMIT 10
    
  3. Clique na guia Nova consulta e renomeie a consulta, por exemplo, Total commits by author.

  4. Para alterar a visualização da tabela padrão, no painel Resultados, clique em Reticências Verticais Trabalhos e clique em Editar.

  5. Em Tipo de visualização, selecione Barra.

  6. Na coluna X, selecione nome.

  7. Na coluna Y, selecione commits.

  8. Clique em Save (Salvar).

Step 9: criar um painel

  1. Na barra lateral, clique no Ícone PainéisPainéis
  2. Clique em Criar painel.
  3. Insira um nome para o painel, por exemplo, GitHub analysis.
  4. Para cada consulta e visualização criada na Etapa 8: criar as consultas SQL do Databricks, clique em Adicionar > Visualização e selecione cada visualização.

Etapa 10: Adicionar as tarefas do SQL ao fluxo de trabalho

Para adicionar as novas tarefas de consulta ao fluxo de trabalho criado em Criar um trabalho do Azure Databricks e adicionar a primeira tarefa, para cada consulta que você criou na Etapa 8: Criar as consultas SQL do Databricks:

  1. Clique no Ícone de fluxos de trabalhoFluxos de Trabalho na barra lateral.
  2. Na coluna Nome, clique no nome do trabalho.
  3. Clique na guia Tarefas.
  4. Clique em Adicionar Botão da Tarefa abaixo da última tarefa.
  5. Insira um nome para a tarefa, em Tipo, selecione SQL e, na tarefa SQL, selecione Consulta.
  6. Selecione a consulta na Consulta SQL.
  7. No SQL Warehouse, selecione um SQL Warehouse sem servidor ou um SQL Warehouse profissional para executar a tarefa.
  8. Clique em Criar.

Etapa 11: Adicionar uma tarefa de painel

  1. Clique em Adicionar Botão da Tarefa abaixo da última tarefa.
  2. Insira um nome para a tarefa, em Tipo, selecione SQL e, na tarefa SQL, selecione Painel herdado.
  3. Selecione o painel criado na Etapa 9: Criar um painel.
  4. No SQL Warehouse, selecione um SQL Warehouse sem servidor ou um SQL Warehouse profissional para executar a tarefa.
  5. Clique em Criar.

Etapa 12: Executar o fluxo de trabalho completo

Para executar o fluxo de trabalho, clique no botão Executar agora. Para exibir detalhes da execução, clique no link na coluna Hora de início da execução no modo de exibição execuções do trabalho.

Etapa 13: Ver os resultados

Para exibir os resultados quando a execução for concluída, clique na tarefa final do painel e clique no nome do painel no painel SQL no painel direito.