Share via


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.

GitHub analiz panosu

Başlamadan önce

Bu kılavuzu tamamlamak için aşağıdakilere ihtiyacınız vardır:

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:

    1. Azure Databricks giriş sayfanıza gidin ve kenar çubuğunda Katalog'a tıklayınKatalog simgesi.
    2. DBFS'ye Gözat'a tıklayın.
    3. 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.
    4. 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.
    5. 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:

  1. Kenar çubuğunda Yeni'ye tıklayın Yeni Simgeve menüden Not Defteri'ni seçin. Not Defteri Oluştur iletişim kutusu görüntülenir.

  2. 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.

  3. Oluştur’a tıklayın.

  4. 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"))
      )
    
  5. Kenar çubuğunda İş Akışları'na tıklayınİş Akışları Simgesi, Delta Live Tablolar sekmesine tıklayın ve İşlem Hattı Oluştur'a tıklayın.

  6. İşlem hattına bir ad verin, örneğin, Transform GitHub data.

  7. Not defteri kitaplıkları alanında, not defterinizin yolunu girin veya not defterini seçmek için tıklayınDosya Seçici Simgesi.

  8. Yapılandırma ekle'ye tıklayın. Metin kutusuna Key yazın commits-path. Metin kutusuna Value 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.

  9. Yapılandırma ekle'ye yeniden tıklayın. Metin kutusuna Key yazın contribs-path. Metin kutusuna Value 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.

  10. 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.

  11. 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

  1. Azure Databricks giriş sayfanıza gidin ve aşağıdakilerden birini yapın:

    • Kenar çubuğunda İş İş Akışları SimgesiAkışları'na ve öğesine tıklayın.İş Oluştur Düğmesi
    • Kenar çubuğunda Yeni'ye tıklayın Yeni Simgeve menüden İş'i seçin.
  2. 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.

  3. Görev adı alanına görev için bir ad girin, örneğin, get_commits.

  4. Tür bölümünde Python betiği'ne tıklayın.

  5. Kaynak bölümünde DBFS / S3'i seçin.

  6. Yol alanına DBFS'de betiğin yolunu girin.

  7. 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, depodan github.com/databrickslabs/overwatch kayıtları getirmek için girin databrickslabs.
    • 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> .
  8. Görevi kaydet'e tıklayın.

Başka bir görev ekleme

  1. Yeni oluşturduğunuz görevin altına tıklayın Görev Ekle Düğmesi .

  2. Görev adı alanına görev için bir ad girin, örneğin, get_contributors.

  3. Tür bölümünde Python betiği görev türünü seçin.

  4. Kaynak bölümünde DBFS / S3'i seçin.

  5. Yol alanına DBFS'de betiğin yolunu girin.

  6. 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, depodan github.com/databrickslabs/overwatch kayıtları getirmek için girin databrickslabs.
    • 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> .
  7. Görevi kaydet'e tıklayın.

Verileri dönüştürmek için görev ekleme

  1. Yeni oluşturduğunuz görevin altına tıklayın Görev Ekle Düğmesi .
  2. Görev adı alanına görev için bir ad girin, örneğin, transform_github_data.
  3. Tür alanında Delta Live Tables işlem hattını seçin ve görev için bir ad girin.
  4. İş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.
  5. 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 Şimdi Çalıştır Düğmesi . Ç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:

  1. Çalıştırma ayrıntıları görünümünde Delta Live Tables görevine tıklayın.
  2. 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.
  3. commits_by_author İşlem hattı DAG'sinde tabloyu seçin.
  4. 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:

  1. 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>.

  2. Hücreyi Çalıştır'a tıklayın Çalıştır Menüsü 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

  1. Kenar çubuğunda Databricks logosunun Databricks logosu altındaki simgeye tıklayın ve SQL'i seçin.

  2. Databricks SQL sorgu düzenleyicisini açmak için Sorgu oluştur'a tıklayın.

  3. 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.

  4. 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
    
  5. Yeni sorgu sekmesine tıklayın ve sorguyu yeniden adlandırın; örneğin, Commits by month top 10 contributors.

  6. 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 İşler Dikey Üç Nokta ve tıklayın.

  7. Görselleştirme türü'nde Çubuk'a tıklayın.

  8. X sütununda ay'ı seçin.

  9. Y sütunlarında count(1) öğesini seçin.

  10. Gruplandırma ölçütü'nde ad'ı seçin.

  11. Kaydet'e tıklayın.

İlk 20 katkıda bulunanı görüntüleme

  1. + 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.

  2. Şu sorguyu girin:

    SELECT
      login,
      cast(contributions AS INTEGER)
    FROM
      github_contributors_raw
    ORDER BY
      contributions DESC
    LIMIT 20
    
  3. Yeni sorgu sekmesine tıklayın ve sorguyu yeniden adlandırın; örneğin, Top 20 contributors.

  4. Görselleştirmeyi varsayılan tablodan değiştirmek için Sonuçlar panelinde Düzenle'ye tıklayın İşler Dikey Üç Nokta ve tıklayın.

  5. Görselleştirme türü'nde Çubuk'a tıklayın.

  6. X sütununda oturum aç'ı seçin.

  7. Y sütunlarında katkılar'ı seçin.

  8. Kaydet'e tıklayın.

Yazara göre toplam işlemeleri görüntüleme

  1. + 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.

  2. Şu sorguyu girin:

    SELECT
      name,
      count(1) commits
    FROM
      commits_by_author
    GROUP BY
      name
    ORDER BY
      commits DESC
    LIMIT 10
    
  3. Yeni sorgu sekmesine tıklayın ve sorguyu yeniden adlandırın; örneğin, Total commits by author.

  4. Görselleştirmeyi varsayılan tablodan değiştirmek için Sonuçlar panelinde Düzenle'ye tıklayın İşler Dikey Üç Nokta ve tıklayın.

  5. Görselleştirme türü'nde Çubuk'a tıklayın.

  6. X sütununda ad'ı seçin.

  7. Y sütunlarında işlemeler'i seçin.

  8. Kaydet'e tıklayın.

9. Adım: Pano oluşturma

  1. Kenar çubuğunda Panolar'a tıklayın Panolar Simgesi
  2. Pano oluştur'a tıklayın.
  3. Pano için bir ad girin, örneğin, GitHub analysis.
  4. 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:

  1. Kenar çubuğunda İş Akışları'na tıklayınİş Akışları Simgesi.
  2. Ad sütununda iş adına tıklayın.
  3. Görevler sekmesine tıklayın.
  4. Son görevin altına tıklayın Görev Ekle Düğmesi .
  5. Görev için bir ad girin, Tür alanında SQL'i seçin ve SQL görevinde Sorgu'yu seçin.
  6. SQL sorgusunda sorguyu seçin.
  7. SQL ambarında, görevi çalıştırmak için sunucusuz bir SQL ambarı veya profesyonel bir SQL ambarı seçin.
  8. Oluştur’a tıklayın.

11. Adım: Pano görevi ekleme

  1. Son görevin altına tıklayın Görev Ekle Düğmesi .
  2. Görev için bir ad girin, Tür alanında SQL'i seçin ve SQL görevinde Eski pano'yu seçin.
  3. 9. Adım: Pano oluşturma bölümünde oluşturulan panoyu seçin.
  4. SQL ambarında, görevi çalıştırmak için sunucusuz bir SQL ambarı veya profesyonel bir SQL ambarı seçin.
  5. 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 Şimdi Çalıştır Düğmesi. Ç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.