Použití Databricks SQL v úloze Azure Databricks
Typ úlohy SQL můžete použít v úloze Azure Databricks, takže můžete vytvářet, plánovat, provozovat a monitorovat pracovní postupy, které zahrnují objekty SQL Databricks, jako jsou dotazy, starší řídicí panely a upozornění. Váš pracovní postup může například ingestovat data, připravit data, provést analýzu pomocí dotazů Sql Databricks a pak zobrazit výsledky na starším řídicím panelu.
Tento článek obsahuje ukázkový pracovní postup, který vytvoří starší řídicí panel zobrazující metriky pro příspěvky GitHubu. V tomto příkladu:
- Ingestování dat GitHubu pomocí skriptu Pythonu a rozhraní REST API GitHubu
- Transformujte data GitHubu pomocí kanálu Delta Live Tables.
- Aktivujte dotazy SQL Databricks, které provádějí analýzu připravených dat.
- Zobrazení analýzy na starším řídicím panelu
Než začnete
K dokončení tohoto návodu potřebujete následující:
- Osobní přístupový token GitHubu. Tento token musí mít oprávnění úložiště .
- Bezserverový SQL Warehouse nebo pro SQL Warehouse. Viz typy SQL Warehouse.
- Obor tajného kódu Databricks Obor tajných kódů se používá k bezpečnému uložení tokenu GitHubu. Viz krok 1: Uložení tokenu GitHubu do tajného kódu.
Krok 1: Uložení tokenu GitHubu do tajného kódu
Místo pevně zakódování přihlašovacích údajů, jako je osobní přístupový token GitHubu v úloze, databricks doporučuje bezpečně ukládat a spravovat tajné kódy pomocí oboru tajných kódů. Následující příkazy rozhraní příkazového řádku Databricks představují příklad vytvoření oboru tajného kódu a uložení tokenu GitHubu do tajného kódu v tomto oboru:
databricks secrets create-scope <scope-name>
databricks secrets put-secret <scope-name> <token-key> --string-value <token>
- Nahraďte
<scope-name
názvem oboru tajných kódů Azure Databricks pro uložení tokenu. - Nahraďte
<token-key>
názvem klíče, který se má k tokenu přiřadit. - Nahraďte
<token>
hodnotou tokenu pat GitHubu.
Krok 2: Vytvoření skriptu pro načtení dat GitHubu
Následující skript Pythonu používá rozhraní REST API GitHubu k načtení dat o potvrzeních a příspěvcích z úložiště GitHub. Vstupní argumenty určují úložiště GitHub. Záznamy se ukládají do umístění v dbFS určeném jiným vstupním argumentem.
V tomto příkladu se k ukládání skriptu Pythonu používá DBFS, ale k ukládání a správě skriptu můžete použít také složky Gitu nebo soubory pracovního prostoru Databricks.
Uložte tento skript do umístění na místním disku:
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()
Nahrajte skript do DBFS:
- Přejděte na cílovou stránku Azure Databricks a na bočním panelu klikněte na Katalog.
- Klikněte na Procházet DBFS.
- V prohlížeči souborů DBFS klikněte na Nahrát. Zobrazí se dialogové okno Nahrát data do DBFS .
- Zadejte cestu do DBFS pro uložení skriptu, klikněte na Drop files to upload, or click to browse, and select the Python script.
- Klikněte na tlačítko Hotovo.
Krok 3: Vytvoření kanálu Delta Live Tables pro zpracování dat GitHubu
V této části vytvoříte kanál Delta Live Tables, který převede nezpracovaná data GitHubu na tabulky, které je možné analyzovat pomocí dotazů SQL Databricks. Pokud chcete vytvořit kanál, proveďte následující kroky:
Na bočním panelu klikněte na Nový a v nabídce vyberte Poznámkový blok. Zobrazí se dialogové okno Vytvořit poznámkový blok .
Ve výchozím jazyce zadejte název a vyberte Python. Cluster můžete nechat nastavený na výchozí hodnotu. Modul runtime Delta Live Tables vytvoří cluster před spuštěním kanálu.
Klikněte na Vytvořit.
Zkopírujte příklad kódu Pythonu a vložte ho do nového poznámkového bloku. Ukázkový kód můžete přidat do jedné buňky poznámkového bloku nebo více buněk.
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")) )
Na bočním panelu klikněte na Pracovní postupy, klikněte na kartu Delta Live Tables a potom na Vytvořit kanál.
Zadejte název kanálu, například
Transform GitHub data
.Do pole Knihovny poznámkových bloků zadejte cestu k poznámkovému bloku nebo kliknutím poznámkový blok vyberte.
Klikněte na Přidat konfiguraci. Do textového
Key
pole zadejtecommits-path
. Do textovéhoValue
pole zadejte cestu DBFS, do které se zapíšou záznamy GitHubu. Může to být libovolná cesta, kterou zvolíte, a je to stejná cesta, kterou použijete při konfiguraci prvního úkolu Pythonu při vytváření pracovního postupu.Znovu klikněte na Přidat konfiguraci . Do textového
Key
pole zadejtecontribs-path
. Do textovéhoValue
pole zadejte cestu DBFS, do které se zapíšou záznamy GitHubu. Může to být libovolná cesta, kterou zvolíte, a je to stejná cesta, kterou použijete při konfiguraci druhé úlohy Pythonu při vytváření pracovního postupu.Do pole Cíl zadejte cílovou databázi,
github_tables
například . Nastavení cílové databáze publikuje výstupní data do metastoru a vyžaduje se pro podřízené dotazy analyzující data vytvořená kanálem.Klikněte na Uložit.
Krok 4: Vytvoření pracovního postupu pro ingestování a transformaci dat GitHubu
Před analýzou a vizualizací dat GitHubu pomocí Databricks SQL je potřeba ingestovat a připravit data. Pokud chcete vytvořit pracovní postup pro dokončení těchto úloh, proveďte následující kroky:
Vytvoření úlohy Azure Databricks a přidání prvního úkolu
Přejděte na cílovou stránku Azure Databricks a udělejte jednu z těchto věcí:
- Na bočním panelu klikněte na Pracovní postupy a klikněte na .
- Na bočním panelu klikněte na Nový a v nabídce vyberte Úloha.
V dialogovém okně úkolu, které se zobrazí na kartě Úkoly , nahraďte přidat název úlohy... názvem vaší úlohy,
GitHub analysis workflow
například .Do pole Název úkolu zadejte název úkolu,
get_commits
například .V příkazu Typ vyberte skript Pythonu.
Ve zdroji vyberte DBFS / S3.
V cestě zadejte cestu ke skriptu v DBFS.
V části Parametry zadejte následující argumenty pro skript Pythonu:
["<owner>","<repo>","commits","<DBFS-output-dir>","<scope-name>","<github-token-key>"]
- Nahraďte
<owner>
názvem vlastníka úložiště. Pokud například chcete načíst záznamy zgithub.com/databrickslabs/overwatch
úložiště, zadejtedatabrickslabs
. - Nahraďte
<repo>
například názvemoverwatch
úložiště . - Nahraďte
<DBFS-output-dir>
cestou v DBFS pro ukládání záznamů načtených z GitHubu. - Nahraďte
<scope-name>
názvem oboru tajného kódu, který jste vytvořili pro uložení tokenu GitHubu. - Nahraďte
<github-token-key>
názvem klíče, který jste přiřadili tokenu GitHubu.
- Nahraďte
Klikněte na Uložit úkol.
Přidání dalšího úkolu
Klikněte pod úkol, který jste právě vytvořili.
Do pole Název úkolu zadejte název úkolu,
get_contributors
například .V části Typ vyberte typ úlohy skriptu Pythonu.
Ve zdroji vyberte DBFS / S3.
V cestě zadejte cestu ke skriptu v DBFS.
V části Parametry zadejte následující argumenty pro skript Pythonu:
["<owner>","<repo>","contributors","<DBFS-output-dir>","<scope-name>","<github-token-key>"]
- Nahraďte
<owner>
názvem vlastníka úložiště. Pokud například chcete načíst záznamy zgithub.com/databrickslabs/overwatch
úložiště, zadejtedatabrickslabs
. - Nahraďte
<repo>
například názvemoverwatch
úložiště . - Nahraďte
<DBFS-output-dir>
cestou v DBFS pro ukládání záznamů načtených z GitHubu. - Nahraďte
<scope-name>
názvem oboru tajného kódu, který jste vytvořili pro uložení tokenu GitHubu. - Nahraďte
<github-token-key>
názvem klíče, který jste přiřadili tokenu GitHubu.
- Nahraďte
Klikněte na Uložit úkol.
Přidání úkolu pro transformaci dat
- Klikněte pod úkol, který jste právě vytvořili.
- Do pole Název úkolu zadejte název úkolu,
transform_github_data
například . - V části Typ vyberte kanál Delta Live Tables a zadejte název úkolu.
- V kanálu vyberte kanál vytvořený v kroku 3: Vytvoření kanálu Delta Live Tables pro zpracování dat GitHubu.
- Klikněte na Vytvořit.
Krok 5: Spuštění pracovního postupu transformace dat
Kliknutím spustíte pracovní postup. Pokud chcete zobrazit podrobnosti o spuštění, klikněte na odkaz ve sloupci Čas zahájení spuštění spuštění v zobrazení spuštění úlohy. Kliknutím na jednotlivé úlohy zobrazíte podrobnosti o spuštění úlohy.
Krok 6: (Volitelné) Chcete-li zobrazit výstupní data po dokončení pracovního postupu, proveďte následující kroky:
- V zobrazení podrobností spuštění klikněte na úlohu Delta Live Tables.
- Na panelu podrobností o spuštění úlohy klikněte na název kanálu v části Kanál. Zobrazí se stránka podrobností kanálu.
commits_by_author
Vyberte tabulku v dag kanálu.- Na panelu commits_by_author klikněte na název tabulky vedle položky Metastore. Otevře se stránka Průzkumník katalogu.
V Průzkumníku katalogu můžete zobrazit schéma tabulky, ukázková data a další podrobnosti o datech. Data pro github_contributors_raw
tabulku zobrazíte stejným postupem.
Krok 7: Odebrání dat GitHubu
V reálné aplikaci můžete průběžně ingestovat a zpracovávat data. Vzhledem k tomu, že tento příklad stáhne a zpracuje celou sadu dat, musíte odebrat již stažená data GitHubu, aby se při opětovném spuštění pracovního postupu zabránilo chybě. Pokud chcete stažená data odebrat, proveďte následující kroky:
Vytvořte nový poznámkový blok a do první buňky zadejte následující příkazy:
dbutils.fs.rm("<commits-path", True) dbutils.fs.rm("<contributors-path", True)
Nahraďte a
<contributors-path>
nahraďte<commits-path>
cesty DBFS, které jste nakonfigurovali při vytváření úloh Pythonu.Klikněte a vyberte Spustit buňku.
Tento poznámkový blok můžete také přidat jako úkol v pracovním postupu.
Krok 8: Vytvoření dotazů SQL databricks
Po spuštění pracovního postupu a vytvoření požadovaných tabulek vytvořte dotazy pro analýzu připravených dat. Pokud chcete vytvořit ukázkové dotazy a vizualizace, proveďte následující kroky:
Zobrazení 10 nejlepších přispěvatelů podle měsíce
Klikněte na ikonu pod logem Databricks na bočním panelu a vyberte SQL.
Kliknutím na Vytvořit dotaz otevřete editor dotazů SQL Databricks.
Ujistěte se, že je katalog nastavený na hive_metastore. Klikněte na výchozí hodnotu vedle hive_metastore a nastavte databázi na cílovou hodnotu, kterou jste nastavili v kanálu Delta Live Tables.
Na kartě Nový dotaz zadejte následující dotaz:
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
Klikněte na kartu Nový dotaz a přejmenujte dotaz,
Commits by month top 10 contributors
například .Ve výchozím nastavení se výsledky zobrazí jako tabulka. Pokud chcete změnit způsob vizualizace dat, například pomocí pruhového grafu, klikněte na panelu Výsledky a klikněte na Upravit.
V typu Vizualizace vyberte pruh.
Ve sloupci X vyberte měsíc.
Ve sloupcích Y vyberte počet(1).
V oblasti Seskupte podle vyberte název.
Klikněte na Uložit.
Zobrazení 20 nejlepších přispěvatelů
Klikněte na + > Vytvořit nový dotaz a ujistěte se, že je katalog nastavený na hive_metastore. Klikněte na výchozí hodnotu vedle hive_metastore a nastavte databázi na cílovou hodnotu, kterou jste nastavili v kanálu Delta Live Tables.
Zadejte následující dotaz:
SELECT login, cast(contributions AS INTEGER) FROM github_contributors_raw ORDER BY contributions DESC LIMIT 20
Klikněte na kartu Nový dotaz a přejmenujte dotaz,
Top 20 contributors
například .Pokud chcete změnit vizualizaci z výchozí tabulky, klikněte na panelu Výsledky a klikněte na Upravit.
V typu Vizualizace vyberte pruh.
Ve sloupci X vyberte přihlášení.
Ve sloupcích Y vyberte příspěvky.
Klikněte na Uložit.
Zobrazení celkových potvrzení autorem
Klikněte na + > Vytvořit nový dotaz a ujistěte se, že je katalog nastavený na hive_metastore. Klikněte na výchozí hodnotu vedle hive_metastore a nastavte databázi na cílovou hodnotu, kterou jste nastavili v kanálu Delta Live Tables.
Zadejte následující dotaz:
SELECT name, count(1) commits FROM commits_by_author GROUP BY name ORDER BY commits DESC LIMIT 10
Klikněte na kartu Nový dotaz a přejmenujte dotaz,
Total commits by author
například .Pokud chcete změnit vizualizaci z výchozí tabulky, klikněte na panelu Výsledky a klikněte na Upravit.
V typu Vizualizace vyberte pruh.
Ve sloupci X vyberte název.
Ve sloupcích Y vyberte potvrzení.
Klikněte na Uložit.
Krok 9: Vytvoření řídicího panelu
- Na bočním panelu klikněte na Řídicí panely.
- Klikněte na Vytvořit řídicí panel.
- Zadejte název řídicího panelu,
GitHub analysis
například . - Pro každý dotaz a vizualizaci vytvořenou v kroku 8: Vytvořte dotazy SQL Databricks, klikněte na Přidat > vizualizaci a vyberte jednotlivé vizualizace.
Krok 10: Přidání úkolů SQL do pracovního postupu
Pokud chcete do pracovního postupu, který jste vytvořili v úloze Azure Databricks, přidat nové úkoly dotazu a přidat první úkol pro každý dotaz, který jste vytvořili v kroku 8: Vytvoření dotazů SQL Databricks:
- Na bočním panelu klikněte na Pracovní postupy.
- Ve sloupci Název klikněte na název úlohy.
- Klikněte na kartu Úkoly .
- Klikněte pod poslední úkol.
- Zadejte název úkolu, do pole Typ vyberte SQL a v úkolu SQL vyberte Dotaz.
- Vyberte dotaz v dotazu SQL.
- Ve službě SQL Warehouse vyberte bezserverový SQL Warehouse nebo pro SQL Warehouse, aby se úloha spustila.
- Klikněte na Vytvořit.
Krok 11: Přidání úlohy řídicího panelu
- Klikněte pod poslední úkol.
- Zadejte název úkolu, do pole Typ, vyberte SQL a v úloze SQL vyberte řídicí panel Starší verze.
- Vyberte řídicí panel vytvořený v kroku 9: Vytvoření řídicího panelu.
- Ve službě SQL Warehouse vyberte bezserverový SQL Warehouse nebo pro SQL Warehouse, aby se úloha spustila.
- Klikněte na Vytvořit.
Krok 12: Spuštění úplného pracovního postupu
Chcete-li spustit pracovní postup, klepněte na tlačítko . Pokud chcete zobrazit podrobnosti o spuštění, klikněte na odkaz ve sloupci Čas zahájení spuštění spuštění v zobrazení spuštění úlohy.
Krok 13: Zobrazení výsledků
Pokud chcete zobrazit výsledky po dokončení spuštění, klikněte na poslední úlohu řídicího panelu a v pravém panelu klikněte na název řídicího panelu SQL.