Delen via


Databricks SQL gebruiken in een Azure Databricks-taak

U kunt het TYPE SQL-taak gebruiken in een Azure Databricks-taak, zodat u werkstromen kunt maken, plannen, gebruiken en bewaken die Databricks SQL-objecten bevatten, zoals query's, verouderde dashboards en waarschuwingen. Uw werkstroom kan bijvoorbeeld gegevens opnemen, de gegevens voorbereiden, analyses uitvoeren met behulp van Databricks SQL-query's en vervolgens de resultaten weergeven in een verouderd dashboard.

Dit artikel bevat een voorbeeldwerkstroom waarmee een verouderd dashboard wordt gemaakt met metrische gegevens voor GitHub-bijdragen. In dit voorbeeld gaat u het volgende doen:

  • GitHub-gegevens opnemen met behulp van een Python-script en de GitHub REST API.
  • Transformeer de GitHub-gegevens met behulp van een Delta Live Tables-pijplijn.
  • Activeer Databricks SQL-query's die analyses uitvoeren op de voorbereide gegevens.
  • De analyse weergeven in een verouderd dashboard.

GitHub-analysedashboard

Voordat u begint

U hebt het volgende nodig om dit scenario te voltooien:

Stap 1: het GitHub-token opslaan in een geheim

In plaats van referenties zoals het persoonlijke toegangstoken van GitHub in een taak te coderen, raadt Databricks aan om een geheim bereik te gebruiken om geheimen veilig op te slaan en te beheren. De volgende Databricks CLI-opdrachten zijn een voorbeeld van het maken van een geheim bereik en het opslaan van het GitHub-token in een geheim in dat bereik:

databricks secrets create-scope <scope-name>
databricks secrets put-secret <scope-name> <token-key> --string-value <token>
  • Vervang <scope-name door de naam van een Azure Databricks-geheim bereik om het token op te slaan.
  • Vervang <token-key> door de naam van een sleutel die u aan het token wilt toewijzen.
  • Vervang door <token> de waarde van het persoonlijke GitHub-toegangstoken.

Stap 2: Een script maken om GitHub-gegevens op te halen

Het volgende Python-script maakt gebruik van de GitHub REST API voor het ophalen van gegevens over doorvoeringen en bijdragen uit een GitHub-opslagplaats. Invoerargumenten geven de GitHub-opslagplaats op. De records worden opgeslagen op een locatie in DBFS die is opgegeven door een ander invoerargument.

In dit voorbeeld wordt DBFS gebruikt om het Python-script op te slaan, maar u kunt ook Databricks Git-mappen of werkruimtebestanden gebruiken om het script op te slaan en te beheren.

  • Sla dit script op een locatie op uw lokale schijf op:

    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()
    
  • Upload het script naar DBFS:

    1. Ga naar de landingspagina van Azure Databricks en klik op Cataloguspictogram Catalogus in de zijbalk.
    2. Klik op DBFS bladeren.
    3. Klik in de DBFS-bestandsbrowser op Uploaden. Het dialoogvenster Gegevens uploaden naar DBFS wordt weergegeven.
    4. Voer een pad in DBFS in om het script op te slaan, klik op Bestanden neerzetten om te uploaden of klik om te bladeren en selecteer het Python-script.
    5. Klik op Gereed.

Stap 3: Een Delta Live Tables-pijplijn maken om de GitHub-gegevens te verwerken

In deze sectie maakt u een Delta Live Tables-pijplijn om de onbewerkte GitHub-gegevens te converteren naar tabellen die kunnen worden geanalyseerd door Databricks SQL-query's. Voer de volgende stappen uit om de pijplijn te maken:

  1. Klik in de zijbalk op Nieuw pictogram Nieuw en selecteer Notitieblok in het menu. Het dialoogvenster Notitieblok maken wordt weergegeven.

  2. Voer in de standaardtaal een naam in en selecteer Python. U kunt Cluster ingesteld laten op de standaardwaarde. De Delta Live Tables-runtime maakt een cluster voordat uw pijplijn wordt uitgevoerd.

  3. Klik op Create.

  4. Kopieer het Python-codevoorbeeld en plak deze in uw nieuwe notebook. U kunt de voorbeeldcode toevoegen aan één cel van het notebook of meerdere cellen.

    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. Klik in de zijbalk op Pictogram Werkstromen Werkstromen, klik op het tabblad Delta Live-tabellen en klik op Pijplijn maken.

  6. Geef de pijplijn een naam, Transform GitHub databijvoorbeeld.

  7. Voer in het veld Notebook-bibliotheken het pad naar uw notitieblok in of klik Pictogram Bestandskiezer hierop om het notitieblok te selecteren.

  8. Klik op Configuratie toevoegen. Typ in commits-pathhet Key tekstvak . Voer in het Value tekstvak het DBFS-pad in waar de GitHub-records worden geschreven. Dit kan elk pad zijn dat u kiest en is hetzelfde pad dat u gebruikt bij het configureren van de eerste Python-taak wanneer u de werkstroom maakt.

  9. Klik nogmaals op Configuratie toevoegen. Typ in contribs-pathhet Key tekstvak . Voer in het Value tekstvak het DBFS-pad in waar de GitHub-records worden geschreven. Dit kan elk pad zijn dat u kiest en is hetzelfde pad dat u gebruikt bij het configureren van de tweede Python-taak wanneer u de werkstroom maakt.

  10. Voer in het veld Doel bijvoorbeeld een doeldatabase github_tablesin. Als u een doeldatabase instelt, worden de uitvoergegevens naar de metastore gepubliceerd en zijn ze vereist voor de downstreamquery's die de gegevens analyseren die door de pijplijn worden geproduceerd.

  11. Klik op Opslaan.

Stap 4: Een werkstroom maken om GitHub-gegevens op te nemen en te transformeren

Voordat u de GitHub-gegevens analyseert en visualiseert met Databricks SQL, moet u de gegevens opnemen en voorbereiden. Voer de volgende stappen uit om een werkstroom te maken om deze taken uit te voeren:

Een Azure Databricks-taak maken en de eerste taak toevoegen

  1. Ga naar de landingspagina van Azure Databricks en voer een van de volgende handelingen uit:

    • Klik in de zijbalk op Pictogram Werkstromen Werkstromen en klik op Knop Taak maken.
    • Klik in de zijbalk op Nieuw pictogram Nieuw en selecteer Taak in het menu.
  2. Vervang in het taakdialoogvenster dat wordt weergegeven op het tabblad Taken een naam voor uw taak toevoegen... door uw taaknaam, bijvoorbeeldGitHub analysis workflow.

  3. Voer in De naam van de taak een naam in voor de taak, bijvoorbeeldget_commits.

  4. Selecteer in Type het Python-script.

  5. Selecteer IN Bron DBFS/S3.

  6. Voer in Pad het pad naar het script in DBFS in.

  7. Voer in Parameters de volgende argumenten in voor het Python-script:

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

    • Vervang door <owner> de naam van de eigenaar van de opslagplaats. Als u bijvoorbeeld records uit de github.com/databrickslabs/overwatch opslagplaats wilt ophalen, voert u het volgende in databrickslabs.
    • Vervang bijvoorbeeld door <repo> de naam overwatchvan de opslagplaats.
    • Vervang <DBFS-output-dir> door een pad in DBFS om de records op te slaan die zijn opgehaald uit GitHub.
    • Vervang <scope-name> door de naam van het geheime bereik dat u hebt gemaakt om het GitHub-token op te slaan.
    • Vervang <github-token-key> door de naam van de sleutel die u hebt toegewezen aan het GitHub-token.
  8. Klik op Taak opslaan.

Nog een taak toevoegen

  1. Klik Knop Taak toevoegen onder de taak die u zojuist hebt gemaakt.

  2. Voer in De naam van de taak een naam in voor de taak, bijvoorbeeldget_contributors.

  3. Selecteer in Type het type Python-scripttaak .

  4. Selecteer IN Bron DBFS/S3.

  5. Voer in Pad het pad naar het script in DBFS in.

  6. Voer in Parameters de volgende argumenten in voor het Python-script:

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

    • Vervang door <owner> de naam van de eigenaar van de opslagplaats. Als u bijvoorbeeld records uit de github.com/databrickslabs/overwatch opslagplaats wilt ophalen, voert u het volgende in databrickslabs.
    • Vervang bijvoorbeeld door <repo> de naam overwatchvan de opslagplaats.
    • Vervang <DBFS-output-dir> door een pad in DBFS om de records op te slaan die zijn opgehaald uit GitHub.
    • Vervang <scope-name> door de naam van het geheime bereik dat u hebt gemaakt om het GitHub-token op te slaan.
    • Vervang <github-token-key> door de naam van de sleutel die u hebt toegewezen aan het GitHub-token.
  7. Klik op Taak opslaan.

Een taak toevoegen om de gegevens te transformeren

  1. Klik Knop Taak toevoegen onder de taak die u zojuist hebt gemaakt.
  2. Voer in De naam van de taak een naam in voor de taak, bijvoorbeeldtransform_github_data.
  3. Selecteer in Type de pijplijn van Delta Live Tables en voer een naam in voor de taak.
  4. Selecteer in Pijplijn de pijplijn die in stap 3 is gemaakt: Maak een Delta Live Tables-pijplijn om de GitHub-gegevens te verwerken.
  5. Klik op Create.

Stap 5: De werkstroom voor gegevenstransformatie uitvoeren

Klik Knop Nu uitvoeren hier om de werkstroom uit te voeren. Als u details voor de uitvoering wilt weergeven, klikt u op de koppeling in de kolom Begintijd voor de uitvoering in de weergave taakuitvoeringen. Klik op elke taak om details voor de taakuitvoering weer te geven.

Stap 6: (Optioneel) Voer de volgende stappen uit om de uitvoergegevens weer te geven nadat de werkstroom is voltooid:

  1. Klik in de weergave uitvoeringsdetails op de taak Delta Live Tables.
  2. Klik in het deelvenster Details van taakuitvoering op de naam van de pijplijn onder Pijplijn. De pagina Pijplijndetails wordt weergegeven.
  3. Selecteer de commits_by_author tabel in de pijplijn-DAG.
  4. Klik op de tabelnaam naast Metastore in het deelvenster commits_by_author . De pagina Catalogusverkenner wordt geopend.

In Catalog Explorer kunt u het tabelschema, voorbeeldgegevens en andere details voor de gegevens bekijken. Volg dezelfde stappen om gegevens voor de github_contributors_raw tabel weer te geven.

Stap 7: De GitHub-gegevens verwijderen

In een echte toepassing kunt u mogelijk continu gegevens opnemen en verwerken. Omdat in dit voorbeeld de volledige gegevensset wordt gedownload en verwerkt, moet u de al gedownloade GitHub-gegevens verwijderen om een fout te voorkomen bij het opnieuw uitvoeren van de werkstroom. Voer de volgende stappen uit om de gedownloade gegevens te verwijderen:

  1. Maak een nieuw notitieblok en voer de volgende opdrachten in de eerste cel in:

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

    Vervang <commits-path> en <contributors-path> door de DBFS-paden die u hebt geconfigureerd bij het maken van de Python-taken.

  2. Klik Menu Uitvoeren en selecteer Cel uitvoeren.

U kunt dit notitieblok ook toevoegen als een taak in de werkstroom.

Stap 8: De Databricks SQL-query's maken

Nadat u de werkstroom hebt uitgevoerd en de vereiste tabellen hebt gemaakt, maakt u query's om de voorbereide gegevens te analyseren. Voer de volgende stappen uit om de voorbeeldquery's en visualisaties te maken:

De tien belangrijkste inzenders per maand weergeven

  1. Klik op het pictogram onder het Databricks-logo Databricks-logo in de zijbalk en selecteer SQL.

  2. Klik op Een query maken om de Databricks SQL-queryeditor te openen.

  3. Zorg ervoor dat de catalogus is ingesteld op hive_metastore. Klik op de standaardinstelling naast hive_metastore en stel de database in op de doelwaarde die u hebt ingesteld in de Delta Live Tables-pijplijn.

  4. Voer op het tabblad Nieuwe query de volgende query in:

    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. Klik op het tabblad Nieuwe query en wijzig de naam van de query, Commits by month top 10 contributorsbijvoorbeeld.

  6. De resultaten worden standaard weergegeven als een tabel. Als u wilt wijzigen hoe de gegevens worden gevisualiseerd, bijvoorbeeld met behulp van een staafdiagram, kliktMenu VanGelezen u in het deelvenster Resultaten op Bewerken en klikt u op Bewerken.

  7. Selecteer Balk in visualisatietype.

  8. Selecteer in de kolom X de maand.

  9. Selecteer count(1) in Y-kolommen.

  10. Selecteer in Groeperen op de naam.

  11. Klik op Opslaan.

De bovenste 20 inzenders weergeven

  1. Klik op + > Nieuwe query maken en zorg ervoor dat de catalogus is ingesteld op hive_metastore. Klik op de standaardinstelling naast hive_metastore en stel de database in op de doelwaarde die u hebt ingesteld in de Delta Live Tables-pijplijn.

  2. Voer de volgende query in:

    SELECT
      login,
      cast(contributions AS INTEGER)
    FROM
      github_contributors_raw
    ORDER BY
      contributions DESC
    LIMIT 20
    
  3. Klik op het tabblad Nieuwe query en wijzig de naam van de query, Top 20 contributorsbijvoorbeeld.

  4. Als u de visualisatie van de standaardtabel wilt wijzigen, klikt u in het deelvenster Resultaten op Menu VanGelezen Bewerken en klikt u op Bewerken.

  5. Selecteer Balk in visualisatietype.

  6. Selecteer in de kolom X de optie Aanmelden.

  7. Selecteer bijdragen in Y-kolommen.

  8. Klik op Opslaan.

De totale doorvoeringen per auteur weergeven

  1. Klik op + > Nieuwe query maken en zorg ervoor dat de catalogus is ingesteld op hive_metastore. Klik op de standaardinstelling naast hive_metastore en stel de database in op de doelwaarde die u hebt ingesteld in de Delta Live Tables-pijplijn.

  2. Voer de volgende query in:

    SELECT
      name,
      count(1) commits
    FROM
      commits_by_author
    GROUP BY
      name
    ORDER BY
      commits DESC
    LIMIT 10
    
  3. Klik op het tabblad Nieuwe query en wijzig de naam van de query, Total commits by authorbijvoorbeeld.

  4. Als u de visualisatie van de standaardtabel wilt wijzigen, klikt u in het deelvenster Resultaten op Menu VanGelezen Bewerken en klikt u op Bewerken.

  5. Selecteer Balk in visualisatietype.

  6. Selecteer in de kolom X de naam.

  7. Selecteer doorvoeringen in Y-kolommen.

  8. Klik op Opslaan.

Stap 9: Een dashboard maken

  1. Klik in de zijbalk op Pictogram Dashboards Dashboards
  2. Klik op Dashboard maken.
  3. Voer bijvoorbeeld GitHub analysiseen naam in voor het dashboard.
  4. Voor elke query en visualisatie die u in stap 8 hebt gemaakt: Maak de Databricks SQL-query's, klik op Visualisatie toevoegen > en selecteer elke visualisatie.

Stap 10: De SQL-taken toevoegen aan de werkstroom

Als u de nieuwe querytaken wilt toevoegen aan de werkstroom die u hebt gemaakt in Een Azure Databricks-taak maken en de eerste taak toevoegen, voegt u voor elke query die u in stap 8 hebt gemaakt, de Databricks SQL-query's maken:

  1. Klik op Pictogram Werkstromen Werkstromen in de zijbalk.
  2. Klik in de kolom Naam op de taaknaam.
  3. Klik op het tabblad Taken .
  4. Klik Knop Taak toevoegen onder de laatste taak.
  5. Voer een naam in voor de taak, selecteer SQL in Type en selecteer query in SQL-taak.
  6. Selecteer de query in sql-query.
  7. Selecteer in SQL Warehouse een serverloze SQL Warehouse of een pro SQL Warehouse om de taak uit te voeren.
  8. Klik op Create.

Stap 11: Een dashboardtaak toevoegen

  1. Klik Knop Taak toevoegen onder de laatste taak.
  2. Voer een naam in voor de taak, selecteer SQL in Type, selecteer SQL en selecteer in SQL-taak verouderd dashboard.
  3. Selecteer het dashboard dat u in stap 9 hebt gemaakt: Een dashboard maken.
  4. Selecteer in SQL Warehouse een serverloze SQL Warehouse of een pro SQL Warehouse om de taak uit te voeren.
  5. Klik op Create.

Stap 12: De volledige werkstroom uitvoeren

Als u de werkstroom wilt uitvoeren, klikt u op Knop Nu uitvoeren. Als u details voor de uitvoering wilt weergeven, klikt u op de koppeling in de kolom Begintijd voor de uitvoering in de weergave taakuitvoeringen.

Stap 13: de resultaten weergeven

Als u de resultaten wilt weergeven wanneer de uitvoering is voltooid, klikt u op de laatste dashboardtaak en klikt u op de naam van het dashboard onder het SQL-dashboard in het rechterdeelvenster.