Azure Databricks işinde Databricks SQL kullanma
Sql görev türünü bir Azure Databricks işinde kullanarak sorgular, eski panolar ve uyarılar gibi Databricks SQL nesnelerini içeren iş akışlarını oluşturabilir, zamanlayabilir, çalıştırabilir ve izleyebilirsiniz. Örneğin, iş akışınız verileri alabilir, verileri hazırlayabilir, Databricks SQL sorgularını kullanarak analiz gerçekleştirebilir ve ardından sonuçları eski bir panoda görüntüleyebilir.
Bu makale, GitHub katkıları için ölçümleri görüntüleyen eski bir pano oluşturan örnek bir iş akışı sağlar. Bu örnekte şunları yapacaksınız:
- Python betiği ve GitHub REST API'sini kullanarak GitHub verilerini alın.
- Delta Live Tables işlem hattı kullanarak GitHub verilerini dönüştürün.
- Hazırlanan veriler üzerinde analiz gerçekleştiren Databricks SQL sorgularını tetikleyin.
- Analizi eski bir panoda görüntüleme.
Başlamadan önce
Bu kılavuzu tamamlamak için aşağıdakilere ihtiyacınız vardır:
- GitHub kişisel erişim belirteci. Bu belirtecin depo izni olmalıdır.
- Sunucusuz SQL ambarı veya profesyonel bir SQL ambarı. Bkz. SQL ambarı türleri.
- Databricks gizli dizisi kapsamı. Gizli dizi kapsamı, GitHub belirtecini güvenli bir şekilde depolamak için kullanılır. Bkz . 1. Adım: GitHub belirtecini gizli dizide depolama.
1. Adım: GitHub belirtecini gizli dizide depolama
Databricks, bir işte GitHub kişisel erişim belirteci gibi kimlik bilgilerini sabit kodlamak yerine gizli dizileri güvenli bir şekilde depolamak ve yönetmek için gizli dizi kapsamı kullanmanızı önerir. Aşağıdaki Databricks CLI komutları, gizli dizi kapsamı oluşturma ve GitHub belirtecini bu kapsamda gizli dizide depolama örneğidir:
databricks secrets create-scope <scope-name>
databricks secrets put-secret <scope-name> <token-key> --string-value <token>
- değerini, belirteci depolamak için Azure Databricks gizli dizi kapsamının adıyla değiştirin
<scope-name
. - değerini belirteçe atanacak anahtarın adıyla değiştirin
<token-key>
. - değerini GitHub kişisel erişim belirtecinin değeriyle değiştirin
<token>
.
2. Adım: GitHub verilerini getirmek için betik oluşturma
Aşağıdaki Python betiği GitHub REST API'sini kullanarak GitHub deposundan işlemeler ve katkılar hakkında veri getirir. Giriş bağımsız değişkenleri GitHub deposunu belirtir. Kayıtlar, başka bir giriş bağımsız değişkeni tarafından belirtilen DBFS'deki bir konuma kaydedilir.
Bu örnekte Python betiğini depolamak için DBFS kullanılır, ancak betiği depolamak ve yönetmek için Databricks Git klasörlerini veya çalışma alanı dosyalarını da kullanabilirsiniz.
Bu betiği yerel diskinizde bir konuma kaydedin:
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()
Betiği DBFS'ye yükleyin:
- Azure Databricks giriş sayfanıza gidin ve kenar çubuğunda Katalog'a tıklayın .
- DBFS'ye Gözat'a tıklayın.
- DBFS dosya tarayıcısında Karşıya Yükle'ye tıklayın. DBFS'ye Veri Yükle iletişim kutusu görüntülenir.
- Betiği depolamak için DBFS'de bir yol girin, Karşıya yüklenecek dosyaları bırak'a tıklayın veya göz atmak için tıklayın ve Python betiğini seçin.
- Bitti'ye tıklayın.
3. Adım: GitHub verilerini işlemek için Delta Live Tables işlem hattı oluşturma
Bu bölümde, ham GitHub verilerini Databricks SQL sorguları tarafından analiz edilebilen tablolara dönüştürmek için bir Delta Live Tables işlem hattı oluşturacaksınız. İşlem hattını oluşturmak için aşağıdaki adımları uygulayın:
Kenar çubuğunda Yeni'ye tıklayın ve menüden Not Defteri'ni seçin. Not Defteri Oluştur iletişim kutusu görüntülenir.
Varsayılan Dil'de bir ad girin ve Python'ı seçin. Kümeyi varsayılan değere ayarlanmış olarak bırakabilirsiniz. Delta Live Tables çalışma zamanı, işlem hattınızı çalıştırmadan önce bir küme oluşturur.
Oluştur’a tıklayın.
Python kod örneğini kopyalayın ve yeni not defterinize yapıştırın. Örnek kodu not defterinin tek bir hücresine veya birden çok hücreye ekleyebilirsiniz.
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")) )
Kenar çubuğunda İş Akışları'na tıklayın, Delta Live Tablolar sekmesine tıklayın ve İşlem Hattı Oluştur'a tıklayın.
İşlem hattına bir ad verin, örneğin,
Transform GitHub data
.Not defteri kitaplıkları alanında, not defterinizin yolunu girin veya not defterini seçmek için tıklayın.
Yapılandırma ekle'ye tıklayın. Metin kutusuna
Key
yazıncommits-path
. Metin kutusunaValue
GitHub kayıtlarının yazılacağı DBFS yolunu girin. Bu, seçtiğiniz herhangi bir yol olabilir ve iş akışını oluştururken ilk Python görevini yapılandırırken kullanacağınız yolla aynıdır.Yapılandırma ekle'ye yeniden tıklayın. Metin kutusuna
Key
yazıncontribs-path
. Metin kutusunaValue
GitHub kayıtlarının yazılacağı DBFS yolunu girin. Bu, seçtiğiniz herhangi bir yol olabilir ve iş akışını oluştururken ikinci Python görevini yapılandırırken kullanacağınız yolla aynıdır.Hedef alanına bir hedef veritabanı girin; örneğin,
github_tables
. Hedef veritabanının ayarlanması, çıktı verilerini meta veri deposunda yayımlar ve işlem hattı tarafından üretilen verileri analiz eden aşağı akış sorguları için gereklidir.Kaydet'e tıklayın.
4. Adım: GitHub verilerini almak ve dönüştürmek için iş akışı oluşturma
Databricks SQL ile GitHub verilerini analiz edip görselleştirmeden önce verileri alıp hazırlamanız gerekir. Bu görevleri tamamlamak üzere bir iş akışı oluşturmak için aşağıdaki adımları gerçekleştirin:
Azure Databricks işi oluşturma ve ilk görevi ekleme
Azure Databricks giriş sayfanıza gidin ve aşağıdakilerden birini yapın:
- Kenar çubuğunda İş Akışları'na ve öğesine tıklayın.
- Kenar çubuğunda Yeni'ye tıklayın ve menüden İş'i seçin.
Görevler sekmesinde görüntülenen görev iletişim kutusunda, İşiniz için ad ekle... yerine iş adınızı (örneğin,
GitHub analysis workflow
) yazın.Görev adı alanına görev için bir ad girin, örneğin,
get_commits
.Tür bölümünde Python betiği'ne tıklayın.
Kaynak bölümünde DBFS / S3'i seçin.
Yol alanına DBFS'de betiğin yolunu girin.
Parametreler'de Python betiği için aşağıdaki bağımsız değişkenleri girin:
["<owner>","<repo>","commits","<DBFS-output-dir>","<scope-name>","<github-token-key>"]
- değerini depo sahibinin adıyla değiştirin
<owner>
. Örneğin, depodangithub.com/databrickslabs/overwatch
kayıtları getirmek için girindatabrickslabs
. - değerini depo adıyla değiştirin
<repo>
; örneğin,overwatch
. - değerini, GitHub'dan getirilen kayıtları depolamak için DBFS'deki bir yolla değiştirin
<DBFS-output-dir>
. - değerini GitHub belirtecini depolamak için oluşturduğunuz gizli dizi kapsamının adıyla değiştirin
<scope-name>
. - değerini GitHub belirtecine atadığınız anahtarın adıyla değiştirin
<github-token-key>
.
- değerini depo sahibinin adıyla değiştirin
Görevi kaydet'e tıklayın.
Başka bir görev ekleme
Yeni oluşturduğunuz görevin altına tıklayın .
Görev adı alanına görev için bir ad girin, örneğin,
get_contributors
.Tür bölümünde Python betiği görev türünü seçin.
Kaynak bölümünde DBFS / S3'i seçin.
Yol alanına DBFS'de betiğin yolunu girin.
Parametreler'de Python betiği için aşağıdaki bağımsız değişkenleri girin:
["<owner>","<repo>","contributors","<DBFS-output-dir>","<scope-name>","<github-token-key>"]
- değerini depo sahibinin adıyla değiştirin
<owner>
. Örneğin, depodangithub.com/databrickslabs/overwatch
kayıtları getirmek için girindatabrickslabs
. - değerini depo adıyla değiştirin
<repo>
; örneğin,overwatch
. - değerini, GitHub'dan getirilen kayıtları depolamak için DBFS'deki bir yolla değiştirin
<DBFS-output-dir>
. - değerini GitHub belirtecini depolamak için oluşturduğunuz gizli dizi kapsamının adıyla değiştirin
<scope-name>
. - değerini GitHub belirtecine atadığınız anahtarın adıyla değiştirin
<github-token-key>
.
- değerini depo sahibinin adıyla değiştirin
Görevi kaydet'e tıklayın.
Verileri dönüştürmek için görev ekleme
- Yeni oluşturduğunuz görevin altına tıklayın .
- Görev adı alanına görev için bir ad girin, örneğin,
transform_github_data
. - Tür alanında Delta Live Tables işlem hattını seçin ve görev için bir ad girin.
- İşlem Hattı'nda, GitHub verilerini işlemek için 3. Adım: Delta Live Tables işlem hattı oluşturma bölümünde oluşturulan işlem hattını seçin.
- Oluştur’a tıklayın.
5. Adım: Veri dönüştürme iş akışını çalıştırma
İş akışını çalıştırmak için tıklayın . Çalıştırmanın ayrıntılarını görüntülemek için, iş çalıştırmaları görünümünde çalıştırmanın Başlangıç zamanı sütunundaki bağlantıya tıklayın. Görev çalıştırmasının ayrıntılarını görüntülemek için her göreve tıklayın.
6. Adım: (İsteğe bağlı) İş akışı çalıştırması tamamlandıktan sonra çıkış verilerini görüntülemek için aşağıdaki adımları gerçekleştirin:
- Çalıştırma ayrıntıları görünümünde Delta Live Tables görevine tıklayın.
- Görev çalıştırma ayrıntıları panelinde İşlem Hattı'nın altındaki işlem hattı adına tıklayın. İşlem hattı ayrıntıları sayfası görüntülenir.
commits_by_author
İşlem hattı DAG'sinde tabloyu seçin.- commits_by_author panelinde Meta veri deposunun yanındaki tablo adına tıklayın. Katalog Gezgini sayfası açılır.
Katalog Gezgini'nde tablo şemasını, örnek verileri ve verilerin diğer ayrıntılarını görüntüleyebilirsiniz. Tablo verilerini görüntülemek için github_contributors_raw
aynı adımları izleyin.
7. Adım: GitHub verilerini kaldırma
Gerçek dünyadaki bir uygulamada, verileri sürekli olarak alıyor ve işliyor olabilirsiniz. Bu örnek veri kümesinin tamamını indirip işlediğinden, iş akışını yeniden çalıştırırken hata oluşmasını önlemek için zaten indirilmiş GitHub verilerini kaldırmanız gerekir. İndirilen verileri kaldırmak için aşağıdaki adımları uygulayın:
Yeni bir not defteri oluşturun ve ilk hücreye aşağıdaki komutları girin:
dbutils.fs.rm("<commits-path", True) dbutils.fs.rm("<contributors-path", True)
ve
<contributors-path>
değerlerini Python görevlerini oluştururken yapılandırdığınız DBFS yolları ile değiştirin<commits-path>
.Hücreyi Çalıştır'a tıklayın ve seçin.
Bu not defterini iş akışına görev olarak da ekleyebilirsiniz.
8. Adım: Databricks SQL sorgularını oluşturma
İş akışını çalıştırdıktan ve gerekli tabloları oluşturduktan sonra, hazırlanan verileri analiz etmek için sorgular oluşturun. Örnek sorgular ve görselleştirmeler oluşturmak için aşağıdaki adımları gerçekleştirin:
Aya göre en çok katkıda bulunan 10 katılımcıyı görüntüleme
Kenar çubuğunda Databricks logosunun altındaki simgeye tıklayın ve SQL'i seçin.
Databricks SQL sorgu düzenleyicisini açmak için Sorgu oluştur'a tıklayın.
Kataloğun hive_metastore olarak ayarlandığından emin olun. hive_metastore yanındaki varsayılan seçeneğine tıklayın ve veritabanını Delta Live Tables işlem hattında ayarladığınız Hedef değer olarak ayarlayın.
Yeni Sorgu sekmesinde aşağıdaki sorguyu girin:
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
Yeni sorgu sekmesine tıklayın ve sorguyu yeniden adlandırın; örneğin,
Commits by month top 10 contributors
.Varsayılan olarak, sonuçlar tablo olarak görüntülenir. Verilerin görselleştirilmesini değiştirmek için, örneğin çubuk grafik kullanarak Sonuçlar panelinde Düzenle'ye tıklayın ve tıklayın.
Görselleştirme türü'nde Çubuk'a tıklayın.
X sütununda ay'ı seçin.
Y sütunlarında count(1) öğesini seçin.
Gruplandırma ölçütü'nde ad'ı seçin.
Kaydet'e tıklayın.
İlk 20 katkıda bulunanı görüntüleme
+ Yeni sorgu oluştur'a tıklayın ve kataloğun hive_metastore olarak ayarlandığından emin olun. > hive_metastore yanındaki varsayılan seçeneğine tıklayın ve veritabanını Delta Live Tables işlem hattında ayarladığınız Hedef değer olarak ayarlayın.
Şu sorguyu girin:
SELECT login, cast(contributions AS INTEGER) FROM github_contributors_raw ORDER BY contributions DESC LIMIT 20
Yeni sorgu sekmesine tıklayın ve sorguyu yeniden adlandırın; örneğin,
Top 20 contributors
.Görselleştirmeyi varsayılan tablodan değiştirmek için Sonuçlar panelinde Düzenle'ye tıklayın ve tıklayın.
Görselleştirme türü'nde Çubuk'a tıklayın.
X sütununda oturum aç'ı seçin.
Y sütunlarında katkılar'ı seçin.
Kaydet'e tıklayın.
Yazara göre toplam işlemeleri görüntüleme
+ Yeni sorgu oluştur'a tıklayın ve kataloğun hive_metastore olarak ayarlandığından emin olun. > hive_metastore yanındaki varsayılan seçeneğine tıklayın ve veritabanını Delta Live Tables işlem hattında ayarladığınız Hedef değer olarak ayarlayın.
Şu sorguyu girin:
SELECT name, count(1) commits FROM commits_by_author GROUP BY name ORDER BY commits DESC LIMIT 10
Yeni sorgu sekmesine tıklayın ve sorguyu yeniden adlandırın; örneğin,
Total commits by author
.Görselleştirmeyi varsayılan tablodan değiştirmek için Sonuçlar panelinde Düzenle'ye tıklayın ve tıklayın.
Görselleştirme türü'nde Çubuk'a tıklayın.
X sütununda ad'ı seçin.
Y sütunlarında işlemeler'i seçin.
Kaydet'e tıklayın.
9. Adım: Pano oluşturma
- Kenar çubuğunda Panolar'a tıklayın
- Pano oluştur'a tıklayın.
- Pano için bir ad girin, örneğin,
GitHub analysis
. - 8. Adım: Databricks SQL sorgularını oluşturma bölümünde oluşturulan her sorgu ve görselleştirme için Görselleştirme Ekle'ye > tıklayın ve her görselleştirmeyi seçin.
10. Adım: SQL görevlerini iş akışına ekleme
Yeni sorgu görevlerini Azure Databricks işi oluşturma bölümünde oluşturduğunuz iş akışına eklemek ve 8. Adım: Databricks SQL sorgularını oluşturma bölümünde oluşturduğunuz her sorgu için ilk görevi eklemek için:
- Kenar çubuğunda İş Akışları'na tıklayın.
- Ad sütununda iş adına tıklayın.
- Görevler sekmesine tıklayın.
- Son görevin altına tıklayın .
- Görev için bir ad girin, Tür alanında SQL'i seçin ve SQL görevinde Sorgu'yu seçin.
- SQL sorgusunda sorguyu seçin.
- SQL ambarında, görevi çalıştırmak için sunucusuz bir SQL ambarı veya profesyonel bir SQL ambarı seçin.
- Oluştur’a tıklayın.
11. Adım: Pano görevi ekleme
- Son görevin altına tıklayın .
- Görev için bir ad girin, Tür alanında SQL'i seçin ve SQL görevinde Eski pano'yu seçin.
- 9. Adım: Pano oluşturma bölümünde oluşturulan panoyu seçin.
- SQL ambarında, görevi çalıştırmak için sunucusuz bir SQL ambarı veya profesyonel bir SQL ambarı seçin.
- Oluştur’a tıklayın.
12. Adım: İş akışının tamamını çalıştırma
İş akışını çalıştırmak için öğesine tıklayın . Çalıştırmanın ayrıntılarını görüntülemek için, iş çalıştırmaları görünümünde çalıştırmanın Başlangıç zamanı sütunundaki bağlantıya tıklayın.
13. Adım: Sonuçları görüntüleme
Çalıştırma tamamlandığında sonuçları görüntülemek için, son pano görevine tıklayın ve sağ panelde SQL panosunun altındaki pano adına tıklayın.