Usar o Databricks SQL em um job do Databricks

É possível usar o tipo de tarefa SQL em um trabalho Databricks, permitindo que o senhor crie, programe, opere e monitore fluxos de trabalho que incluam objetos Databricks SQL, como consultas, painéis legados e alertas. Por exemplo, seu fluxo de trabalho pode ingerir dados, preparar os dados, realizar análises usando consultas Databricks SQL e, em seguida, exibir os resultados em um painel legado.

Este artigo fornece um exemplo de fluxo de trabalho que cria um painel de controle legado exibindo métricas para as contribuições do GitHub. Neste exemplo, o senhor irá:

  • Ingest GitHub uso de dados a Python script e o GitHub REST API.

  • Transforme o GitHub uso de dados em Delta Live Tables pipeline.

  • Acionar Databricks SQL consultas que realizam análises nos dados preparados.

  • Exibir a análise em um dashboard legado.

Painel de análise do GitHub

Antes de começar

O senhor precisa dos seguintes itens para concluir este passo a passo:

passo 1: armazene os tokens do GitHub em segredo

Em vez de codificar credenciais como a GitHub pessoal access token em um Job, a Databricks recomenda o uso de um Secret Scope para armazenar e gerenciar segredos com segurança. Os seguintes comandos Databricks CLI são um exemplo da criação de um escopo secreto e do armazenamento dos tokens 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 Databricks Secret Scope para armazenar os tokens.

  • Substitua <token-key> pelo nome de um key para atribuir aos tokens.

  • Substitua <token> pelo valor do GitHub pessoal access token.

passo 2: Criar um script para buscar dados do GitHub

O script Python a seguir usa o endereço GitHub REST API para obter dados sobre o commit e as contribuições de um GitHub repo. Os argumentos de entrada especificam o endereço GitHub repo. 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 Python, mas o senhor também pode usar pastas Git do Databricks ou arquivos de espaço de trabalho para armazenar e gerenciar o script.

  • Salve esse script em um local em seu 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()
    
  • Faça o upload do script para o DBFS:

    1. Acesse o site Databricks páginas de aterrissagem e clique em Ícone de catálogo Catalog na barra lateral.

    2. Clique em Browse DBFS.

    3. No navegador de arquivos DBFS, clique em upload. A caixa de diálogo upload Data to DBFS é exibida.

    4. Digite um caminho no DBFS para armazenar o script, clique em Drop files to upload (Soltar arquivos para carregar) ou clique para procurar e selecione o script Python.

    5. Clique em Concluído.

passo 3: criar um pipeline Delta Live Tables para processar os dados do GitHub

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

  1. Na barra lateral, clique em Novo ícone New e selecione Notebook no menu. A caixa de diálogo Create Notebook é exibida.

  2. No idioma padrão, digite um nome e selecione Python. O senhor pode deixar o cluster definido com o valor default. O tempo de execução do Delta Live Tables cria um cluster antes de executar o pipeline.

  3. Clique em Criar.

  4. Copie o exemplo de código Python e cole-o em seu novo Notebook. O senhor 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 fluxo de trabalho Icon fluxo de trabalho, clique no botão Delta Live Tables tab e clique em Criar pipeline.

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

  7. No campo Notebook biblioteca, digite o caminho para o Notebook ou clique em Ícone do seletor de arquivos para selecionar o Notebook.

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

  9. Clique novamente em Add configuration (Adicionar configuração ). Na caixa de texto Key, digite contribs-path. Na caixa de texto Value, insira o caminho DBFS onde os registros do GitHub serão gravados. Esse pode ser qualquer caminho que o senhor escolher e é o mesmo caminho que usará ao configurar a segunda tarefa do Python quando criar o fluxo de trabalho.

  10. No campo Target (Destino ), digite um banco de dados de destino, por exemplo, github_tables. A definição de um banco de dados de destino publica os dados de saída no metastore e é necessária para as consultas downstream que analisam os dados produzidos pelo pipeline.

  11. Clique em Salvar.

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

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

Crie um Databricks Job e adicione a primeira tarefa

  1. Acesse o site Databricks páginas de aterrissagem e faça uma das seguintes ações:

    • Na barra lateral, clique em fluxo de trabalho Icon fluxo de trabalho e clique em Botão criar job.

    • Na barra lateral, clique em Novo ícone New e selecione Job no menu.

  2. Na caixa de diálogo da tarefa que aparece na tarefa tab, substitua Add a name for your Job (Adicionar um nome para o trabalho ) pelo nome do trabalho, por exemplo, GitHub analysis workflow.

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

  4. Em Type, selecione Python script.

  5. Em Source, selecione DBFS / S3.

  6. Em Path (Caminho), digite o caminho para o script no DBFS.

  7. Em Parameters (Parâmetros), digite 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 repositório github.com/databrickslabs/overwatch, digite databrickslabs.

    • Substitua <repo> pelo nome do repositório, por exemplo, overwatch.

    • Substitua <DBFS-output-dir> por um caminho no DBFS para armazenar os registros obtidos do GitHub.

    • Substitua <scope-name> pelo nome do Secret Scope que o senhor criou para armazenar os tokens GitHub.

    • Substitua <github-token-key> pelo nome do key que o senhor atribuiu aos tokens GitHub.

  8. Clique em Save task (Salvar tarefa).

Adicionar outra tarefa

  1. Clique em Botão adicionar tarefa abaixo da tarefa que o senhor acabou de criar.

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

  3. Em Type (Tipo), selecione o tipo de tarefa de script Python.

  4. Em Source, selecione DBFS / S3.

  5. Em Path (Caminho), digite o caminho para o script no DBFS.

  6. Em Parameters (Parâmetros), digite 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 repositório github.com/databrickslabs/overwatch, digite databrickslabs.

    • Substitua <repo> pelo nome do repositório, por exemplo, overwatch.

    • Substitua <DBFS-output-dir> por um caminho no DBFS para armazenar os registros obtidos do GitHub.

    • Substitua <scope-name> pelo nome do Secret Scope que o senhor criou para armazenar os tokens GitHub.

    • Substitua <github-token-key> pelo nome do key que o senhor atribuiu aos tokens GitHub.

  7. Clique em Save task (Salvar tarefa).

Adicionar uma tarefa para transformar os dados

  1. Clique em Botão adicionar tarefa abaixo da tarefa que o senhor acabou de criar.

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

  3. Em Type (Tipo), selecione o pipeline Delta Live Tables e digite um nome para a tarefa.

  4. Em Pipeline, selecione o pipeline criado na passo 3: Crie um pipeline Delta Live Tables para processar os dados do GitHub.

  5. Clique em Criar.

passo 5: a execução dos dados mudou o fluxo de trabalho

Clique em Botão executar agora para executar o fluxo de trabalho. Para view os detalhes da execução, clique no link na coluna de tempo de início da execução no Job execução view. Clique em cada tarefa para acessar view detalhes da execução da tarefa.

passo 6: (opcional) para visualizar os dados de saída após a conclusão da execução do fluxo de trabalho, execute as seguintes passos:

  1. Nos detalhes da execução view, clique na tarefa Delta Live Tables.

  2. No painel de detalhes da execução da tarefa, clique no nome pipeline em pipeline. A página de 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 de confirmação. A página Catalog Explorer é aberta.

No Catalog Explorer, o senhor pode acessar view o esquema da tabela, os dados de amostra e outros detalhes dos dados. Siga os mesmos passos para view os dados da tabela github_contributors_raw.

passo 7: Remova os dados do GitHub

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

  1. Crie um novo Notebook e digite o seguinte comando 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 o senhor configurou ao criar a tarefa Python.

  2. Clique em Menu Executar e selecione executar Cell.

O senhor também pode adicionar esse Notebook como uma tarefa no fluxo de trabalho.

passo 8: criar a query Databricks SQL

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

Exibir os 10 principais colaboradores por mês

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

  2. Clique em Create a query (Criar uma consulta ) para abrir o editor de consultas Databricks SQL.

  3. Certifique-se de que o catálogo esteja definido como hive_metastore. Clique em default ao lado de hive_metastore e defina o banco de dados com o valor Target que o senhor definiu no pipeline Delta Live Tables.

  4. Em New Query (Nova consulta ) tab, digite 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 em New query (Nova consulta ) tab e renomeie a consulta, por exemplo, Commits by month top 10 contributors.

  6. Em default, os resultados são exibidos como uma tabela. Para alterar a forma como os dados são visualizados, por exemplo, usando um gráfico de barras, no painel Results (Resultados ), clique em Menu Kebab e clique em Edit (Editar).

  7. Em Visualization type (Tipo de visualização), selecione Bar (Barra).

  8. Na coluna X, selecione o mês.

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

  10. Em Group by, selecione o nome.

  11. Clique em Salvar.

Exibir os 20 principais colaboradores

  1. Clique em + > Create new query e verifique se o catálogo está definido como hive_metastore. Clique em default ao lado de hive_metastore e defina o banco de dados com o valor Target que o senhor definiu no pipeline Delta Live Tables.

  2. Digite a seguinte consulta:

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

  4. Para alterar a visualização da tabela default, no painel Results (Resultados ), clique em Menu Kebab e clique em Edit (Editar).

  5. Em Visualization type (Tipo de visualização), selecione Bar (Barra).

  6. Na coluna X, selecione login.

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

  8. Clique em Salvar.

Exibir o total de confirmações por autor

  1. Clique em + > Create new query e verifique se o catálogo está definido como hive_metastore. Clique em default ao lado de hive_metastore e defina o banco de dados com o valor Target que o senhor definiu no pipeline Delta Live Tables.

  2. Digite a seguinte consulta:

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

  4. Para alterar a visualização da tabela default, no painel Results (Resultados ), clique em Menu Kebab e clique em Edit (Editar).

  5. Em Visualization type (Tipo de visualização), selecione Bar (Barra).

  6. Na coluna X, selecione o nome.

  7. Nas colunas Y, selecione commit.

  8. Clique em Salvar.

passo 9: criar um painel

  1. Na barra lateral, clique em Ícone dos painéis Dashboards

  2. Clique em Create dashboard (Criar painel).

  3. Digite um nome para o painel, por exemplo, GitHub analysis.

  4. Para cada query e visualização criada na passo 8: Crie a query Databricks SQL, clique em Adicionar > Visualização e selecione cada visualização.

passo 10: Adicionar as tarefas SQL ao fluxo de trabalho

Para adicionar as novas tarefas query ao fluxo de trabalho que você criou em Criar um Job do Databricks e adicionar a primeira tarefa, para cada query criada na passo 8: Crie a query Databricks SQL:

  1. Clique em fluxo de trabalho Icon fluxo de trabalho na barra lateral.

  2. Na coluna Nome, clique no nome do cargo.

  3. Clique na aba Tarefas.

  4. Clique em Botão adicionar tarefa abaixo da última tarefa.

  5. Digite um nome para a tarefa, em Type selecione SQLe, em SQL tarefa, selecione Query (Consulta).

  6. Selecione a consulta na consulta SQL.

  7. Em SQL warehouseselecione um serverless SQL warehouse ou um pro SQL warehouse para executar a tarefa.

  8. Clique em Criar.

passo 11: Adicionar uma tarefa de painel

  1. Clique em Botão adicionar tarefa abaixo da última tarefa.

  2. Digite um nome para a tarefa, em Type (Tipo), selecione SQLe, em SQL tarefa, selecione Legacy dashboard (Painel legado).

  3. Selecione o painel criado na passo 9: Criar um painel.

  4. Em SQL warehouseselecione um serverless SQL warehouse ou um pro SQL warehouse para executar a tarefa.

  5. Clique em Criar.

passo 12: execução do fluxo de trabalho completo

Para executar o fluxo de trabalho, clique em Botão executar agora. Para view os detalhes da execução, clique no link na coluna de tempo de início da execução no Job execução view.

passo 13: Veja os resultados

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