dbt Cloud'a Bağlan

dbt (veri derleme aracı), veri analistlerinin ve veri mühendislerinin yalnızca seçim deyimleri yazarak verileri dönüştürmesini sağlayan bir geliştirme ortamıdır. dbt, bu seçim deyimlerini tablolara ve görünümlere dönüştürmeyi işler. dbt kodunuzu ham SQL'de derler ve ardından bu kodu Azure Databricks'te belirtilen veritabanında çalıştırır. dbt, işbirliğine dayalı kodlama desenlerini ve sürüm denetimi, belgeler ve modülerlik gibi en iyi yöntemleri destekler.

dbt verileri ayıklamaz veya yüklemez. dbt, "yüklemeden sonra dönüştürme" mimarisini kullanarak yalnızca dönüştürme adımına odaklanır. dbt, verilerinizin bir kopyasının zaten veritabanınızda olduğunu varsayar.

Bu makale dbt Cloud'a odaklanır. dbt Cloud, işleri zamanlama, CI/CD, belge sunumu, izleme ve uyarma ve tümleşik geliştirme ortamı (IDE) için anahtar teslimi destekle donatılmıştır.

Dbt'nin dbt Core adlı yerel bir sürümü de kullanılabilir. dbt Core, dbt kodunu yerel geliştirme makinenizde istediğiniz metin düzenleyicisine veya IDE'ye yazmanızı ve ardından dbt'yi komut satırından çalıştırmanızı sağlar. dbt Core, dbt Komut Satırı Arabirimi'ni (CLI) içerir. Dbt CLI'yi kullanmak ve açık kaynak ücretsizdir. Daha fazla bilgi için bkz. dbt Core'a Bağlan.

dbt Cloud ve dbt Core barındırılan git depolarını (örneğin GitHub, GitLab veya BitBucket'te) kullanabileceği için dbt Cloud kullanarak bir dbt projesi oluşturabilir ve ardından dbt Cloud ve dbt Core kullanıcılarınızın kullanımına sunabilirsiniz. Daha fazla bilgi için bkz . Dbt projesi oluşturma ve dbt web sitesinde var olan bir projeyi kullanma.

dbt'ye genel bir genel bakış için aşağıdaki YouTube videosunu izleyin (26 dakika).

İş Ortağı Bağlan kullanarak dbt Cloud'a Bağlan

Bu bölümde, İş Ortağı Bağlan kullanarak bir Databricks SQL ambarını dbt Cloud'a bağlama ve ardından dbt Cloud'a verilerinize okuma erişimi verme açıklanmaktadır.

Standart bağlantılar ile dbt Cloud arasındaki farklar

İş Ortağı Bağlan kullanarak dbt Cloud'a bağlanmak için İş Ortağı Bağlan kullanarak veri hazırlama iş ortaklarına Bağlan adımlarını izleyin. dbt Bulut bağlantısı aşağıdaki yollarla standart veri hazırlama ve dönüştürme bağlantılarından farklıdır:

  • İş ortağı Bağlan, hizmet sorumlusuna ve kişisel erişim belirtecine ek olarak varsayılan olarak DBT_CLOUD_ENDPOINT adlı bir SQL ambarı (eski adı SQL uç noktası) oluşturur.

Bağlanma adımları

İş Ortağı Bağlan kullanarak dbt Cloud'a bağlanmak için aşağıdakileri yapın:

  1. İş Ortağı Bağlan kullanarak veri hazırlama iş ortaklarına Bağlan.

  2. dbt Cloud'a bağlandıktan sonra dbt Bulut panonuz görüntülenir. dbt Cloud projenizi keşfetmek için, menü çubuğunda dbt logosunun yanındaki dbt hesabınızın adını görüntülenmiyorsa ilk açılan listeden seçin ve görüntülenmediyse ikinci açılan menüden Databricks İş Ortağı Bağlan Deneme sürümü projesini seçin.

    İpucu

    Projenizin ayarlarını görüntülemek için "üç şeritli" veya "hamburger" menüsüne tıklayın, Hesap Ayarlar > Projeler'e tıklayın ve projenin adına tıklayın. Bağlantı ayarlarını görüntülemek için Bağlan ion'ın yanındaki bağlantıya tıklayın. Ayarları değiştirmek için Düzenle'ye tıklayın.

    Bu projenin Azure Databricks kişisel erişim belirteci bilgilerini görüntülemek için menü çubuğundaki "kişi" simgesine tıklayın, Profil > Kimlik Bilgileri Databricks > İş Ortağı Bağlan Deneme Sürümü'ne tıklayın ve projenin adına tıklayın. Değişiklik yapmak için Düzenle'ye tıklayın.

dbt Cloud'a verilerinize okuma erişimi verme adımları

İş ortağı Bağlan, DBT_CLOUD_USER hizmet sorumlusuna yalnızca varsayılan katalogda yalnızca oluşturma izni verir. DBT_CLOUD_USER hizmet sorumlusuna seçtiğiniz verilere okuma erişimi vermek için Azure Databricks çalışma alanınızda bu adımları izleyin.

Uyarı

Dbt Cloud'a çalışma alanınızdaki kataloglar, veritabanları ve tablolar arasında ek erişim vermek için bu adımları uyarlayabilirsiniz. Ancak, en iyi güvenlik uygulaması olarak Databricks, yalnızca DBT_CLOUD_USER hizmet sorumlusunun çalışması ve bu tablolara yalnızca okuma erişimine sahip olması gereken tek tek tablolara erişim vermenizi kesinlikle önerir.

  1. Kenar çubuğunda Katalog'a tıklayınKatalog simgesi.

  2. Sağ üstteki açılan listeden SQL ambarını (DBT_CLOUD_ENDPOINT) seçin.

    Ambar seç

    1. Katalog Gezgini'nin altında tablonuzun veritabanını içeren kataloğu seçin.
    2. Tablonuzu içeren veritabanını seçin.
    3. Tablonuzu seçin.

    İpucu

    Kataloğunuzu, veritabanınızı veya tablonuzu listede görmüyorsanız, listeyi daraltmak için sırasıyla Katalog Seç, Veritabanı Seç veya Tabloları filtrele kutularına adın herhangi bir bölümünü girin.

    Tabloları filtreleme

  3. İzinler'e tıklayın.

  4. Ver'e tıklayın.

  5. Birden çok kullanıcı veya grup eklemek için Tür için DBT_CLOUD_USER'ı seçin. Bu, iş ortağının önceki bölümde sizin için oluşturduğu Azure Databricks hizmet sorumlusudur Bağlan.

    İpucu

    DBT_CLOUD_USER görmüyorsanız, listede görünene kadar Birden çok kullanıcı veya grup eklemek için Tür kutusuna yazmaya DBT_CLOUD_USERbaşlayın ve ardından seçin.

  6. ve öğesini seçerek SELECT yalnızca okuma erişimi verin READ METADATA.

  7. Tamam'a tıklayın.

dbt Cloud'a okuma erişimi vermek istediğiniz her ek tablo için 4-9 arası adımları yineleyin.

dbt Bulut bağlantısı sorunlarını giderme

Birisi bu hesap için dbt Cloud'da projeyi silerse ve dbt kutucuğuna tıklarsanız, projenin bulunamadığını belirten bir hata iletisi görüntülenir. Bunu düzeltmek için Bağlantıyı sil'e tıklayın ve bağlantıyı yeniden oluşturmak için bu yordamın başından başlayın.

dbt Cloud'a el ile Bağlan

Bu bölümde, Azure Databricks çalışma alanınızdaki bir Azure Databricks kümesini veya Databricks SQL ambarını dbt Cloud'a bağlama açıklanmaktadır.

Önemli

Databricks, bir SQL ambara bağlanmayı önerir. Databricks SQL erişim yetkilendirmeniz yoksa veya Python modellerini çalıştırmak istiyorsanız, bunun yerine bir kümeye bağlanabilirsiniz.

Gereksinim -leri

  • Azure Databricks çalışma alanınızdaki bir küme veya SQL ambarı.

  • Kümenizin veya SQL ambarınızın bağlantı ayrıntıları, özellikle Sunucu Ana Bilgisayar Adı, Bağlantı Noktası ve HTTP Yolu değerleri.

  • Azure Databricks kişisel erişim belirteci veya Microsoft Entra Id (eski adıYla Azure Active Directory) belirteci.. Kişisel erişim belirteci oluşturmak için aşağıdakileri yapın:

    1. Azure Databricks çalışma alanınızda üst çubukta Azure Databricks kullanıcı adınıza tıklayın ve açılan listeden Kullanıcı Ayarlar'ni seçin.
    2. Geliştirici'ye tıklayın.
    3. Erişim belirteçleri'nin yanındaki Yönet'e tıklayın.
    4. Yeni belirteç oluştur'a tıklayın.
    5. (İsteğe bağlı) Gelecekte bu belirteci tanımlamanıza yardımcı olacak bir açıklama girin ve belirtecin varsayılan 90 günlük ömrünü değiştirin. Yaşam süresi olmayan bir belirteç oluşturmak için (önerilmez), Yaşam Süresi (gün) kutusunu boş (boş) bırakın.
    6. Generate (Oluştur) düğmesine tıklayın.
    7. Görüntülenen belirteci güvenli bir konuma kopyalayın ve bitti'ye tıklayın.

    Not

    Kopyalanan belirteci güvenli bir konuma kaydettiğinizden emin olun. Kopyalanan belirtecinizi başkalarıyla paylaşmayın. Kopyalanan belirteci kaybederseniz, tam olarak aynı belirteci yeniden oluşturamazsınız. Bunun yerine, yeni bir belirteç oluşturmak için bu yordamı yinelemeniz gerekir. Kopyalanan belirteci kaybederseniz veya belirtecin gizliliğinin ihlal edildiğini düşünüyorsanız Databricks, Erişim belirteçleri sayfasındaki belirtecin yanındaki çöp kutusu (İptal Et) simgesine tıklayarak bu belirteci çalışma alanınızdan hemen silmenizi kesinlikle önerir.

    Çalışma alanınızda belirteç oluşturamıyor veya kullanamıyorsanız, bunun nedeni çalışma alanı yöneticinizin belirteçleri devre dışı bırakmış olması veya size belirteç oluşturma veya kullanma izni vermemiş olması olabilir. Çalışma alanı yöneticinize veya aşağıdakilere bakın:

    Not

    En iyi güvenlik uygulaması olarak otomatik araçlar, sistemler, betikler ve uygulamalarla kimlik doğrulaması yaptığınızda Databricks, çalışma alanı kullanıcıları yerine hizmet sorumlularına ait kişisel erişim belirteçlerini kullanmanızı önerir. Hizmet sorumlularına yönelik belirteçler oluşturmak için bkz . Hizmet sorumlusu için belirteçleri yönetme.

  • dbt Cloud'u Unity Kataloğu, dbt sürüm 1.1 veya üzeri tarafından yönetilen verilere bağlamak için.

    Bu makaledeki adımlar, en son dbt sürümünü kullanan yeni bir ortam oluşturur. Mevcut bir ortam için dbt sürümünü yükseltme hakkında bilgi için dbt belgelerindeki Bulut'ta dbt'nin en son sürümüne yükseltme bölümüne bakın.

1. Adım: dbt Cloud'a kaydolma

dbt Cloud - Kaydol'a gidin ve e-posta, ad ve şirket bilgilerinizi girin. Bir parola oluşturun ve Hesabımı oluştur'a tıklayın.

2. Adım: Dbt projesi oluşturma

Bu adımda, Azure Databricks kümesine veya SQL ambarı ile bağlantı, kaynak kodunuzu içeren bir depo ve bir veya daha fazla ortam (test ve üretim ortamları gibi) içeren bir dbt projesi oluşturursunuz.

  1. dbt Cloud'da oturum açın.

  2. Ayarlar simgesine tıklayın ve ardından Hesap Ayarlar'ne tıklayın.

  3. Yeni Proje'ye tıklayın.

  4. Ad alanına projeniz için benzersiz bir ad girin ve Devam'a tıklayın.

  5. Bağlantı seçin için Databricks'e ve ardından İleri'ye tıklayın.

  6. Ad alanına bu bağlantı için benzersiz bir ad girin.

  7. Bağdaştırıcı Seç için Databricks (dbt-databricks) öğesine tıklayın.

    Not

    Databricks, dbt-sparkyerine Unity Kataloğu'nu destekleyen öğesinin kullanılmasını dbt-databricksönerir. Varsayılan olarak, yeni projeler kullanır dbt-databricks. Var olan bir projeyi 'a geçirmek için dbt-databricksdbt belgelerinde dbt-spark'tan dbt-databricks'e geçiş bölümüne bakın.

  8. Ayarlar altında, Sunucu Ana Bilgisayar Adı için gereksinimlerden sunucu ana bilgisayar adı değerini girin.

  9. HTTP Yolu için gereksinimlerden HTTP yolu değerini girin.

  10. Çalışma alanınız Unity Kataloğu etkinse, İsteğe bağlı Ayarlar altında dbt Cloud'un kullanması için kataloğun adını girin.

  11. Geliştirme Kimlik Bilgileri'nin altında, Belirteç için gereksinimlerden kişisel erişim belirtecini veya Microsoft Entra Id belirtecini girin.

  12. Şema için dbt Cloud'un tabloları ve görünümleri oluşturmasını istediğiniz şemanın adını girin (örneğin, default).

  13. Bağlantıyı Sına’ya tıklayın.

  14. Test başarılı olursa İleri'ye tıklayın.

Daha fazla bilgi için bkz. dbt web sitesindeki Databricks ODBC'ye Bağlan.

İpucu

Bu projenin ayarlarını görüntülemek veya değiştirmek ya da projeyi tamamen silmek için ayarlar simgesine tıklayın, Hesap Ayarlar > Projeler'e tıklayın ve projenin adına tıklayın. Ayarları değiştirmek için Düzenle'ye tıklayın. Projeyi silmek için Projeyi Sil'i düzenle'ye > tıklayın.

Bu proje için Azure Databricks kişisel erişim belirteci değerinizi görüntülemek veya değiştirmek için "kişi" simgesine, Profil > Kimlik Bilgileri'ne ve projenin adına tıklayın. Değişiklik yapmak için Düzenle'ye tıklayın.

Azure Databricks kümesine veya Databricks SQL ambarı'na bağlandıktan sonra, Ekran yönergelerini izleyerek Depo Ayarlama'ya gidin ve devam'a tıklayın.

Depoyu ayarladıktan sonra, ekrandaki yönergeleri izleyerek kullanıcıları davet edin ve ardından Tamamla'ya tıklayın. Veya Atla ve Tamamla'ya tıklayın.

Öğretici

Bu bölümde dbt Cloud projenizi kullanarak bazı örnek verilerle çalışacaksınız. Bu bölümde, projenizi önceden oluşturduğunuz ve dbt Cloud IDE'nin bu projede açık olduğu varsayılır.

1. Adım: Model oluşturma ve çalıştırma

Bu adımda dbt Cloud IDE'yi kullanarak, aynı veritabanındaki mevcut verileri temel alarak veritabanında yeni bir görünüm (varsayılan) veya yeni tablo oluşturan deyimler select olan modelleri oluşturup çalıştırırsınız. Bu yordam, Örnek veri kümelerindeki örnek diamonds tabloyu temel alan bir model oluşturur.

Bu tabloyu oluşturmak için aşağıdaki kodu kullanın.

DROP TABLE IF EXISTS diamonds;

CREATE TABLE diamonds USING CSV OPTIONS (path "/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", header "true")

Bu yordam, bu tablonun çalışma alanınızın default veritabanında zaten oluşturulduğunu varsayar.

  1. Proje açıkken, kullanıcı arabiriminin üst kısmındaki Geliştir'e tıklayın.

  2. Dbt projelerini başlat'a tıklayın.

  3. İşleme ve eşitleme'ye tıklayın, bir işleme iletisi girin ve ardından İşleme'ye tıklayın.

  4. Dal oluştur'a tıklayın, dalınız için bir ad girin ve gönder'e tıklayın.

  5. İlk modeli oluşturun: Yeni Dosya Oluştur'a tıklayın.

  6. Metin düzenleyicisinde aşağıdaki SQL deyimini girin. Bu deyim, tablodaki her baklava diamonds için yalnızca karat, kesme, renk ve netlik ayrıntılarını seçer. blok, config dbt'ye veritabanında bu deyimi temel alan bir tablo oluşturmasını emreder.

    {{ config(
      materialized='table',
      file_format='delta'
    ) }}
    
    select carat, cut, color, clarity
    from diamonds
    
  7. Farklı Kaydet'e tıklayın.

  8. Dosya adı olarak girin models/diamonds_four_cs.sql ve Oluştur'a tıklayın.

  9. İkinci bir model oluşturun: Sağ üst köşedeki (Yeni Dosya Oluştur) seçeneğine tıklayın.Yeni Dosya Oluştur simgesi

  10. Metin düzenleyicisinde aşağıdaki SQL deyimini girin. Bu deyim, tablodaki colorsdiamonds_four_cs sütundan benzersiz değerleri seçerek sonuçları önce alfabetik düzende sıralar. Blok olmadığından config , bu model dbt'ye bu deyimi temel alarak veritabanında bir görünüm oluşturmasını emreder.

    select distinct color
    from diamonds_four_cs
    sort by color asc
    
  11. Farklı Kaydet'e tıklayın.

  12. Dosya adı olarak yazın models/diamonds_list_colors.sqlve Oluştur'a tıklayın.

  13. Üçüncü bir model oluşturma: Sağ üst köşedeki (Yeni Dosya Oluştur) seçeneğine tıklayın.Yeni Dosya Oluştur simgesi

  14. Metin düzenleyicisinde aşağıdaki SQL deyimini girin. Bu ifade, ortalama baklava fiyatlarını renge göre sıralar ve sonuçları en yüksekten en düşüke kadar ortalama fiyata göre sıralar. Bu model, dbt'ye bu deyimi temel alarak veritabanında bir görünüm oluşturmasını emredmektedir.

    select color, avg(price) as price
    from diamonds
    group by color
    order by price desc
    
  15. Farklı Kaydet'e tıklayın.

  16. Dosya adı olarak girin models/diamonds_prices.sql ve Oluştur'a tıklayın.

  17. Modelleri çalıştırma: Komut satırında, komutu önceki üç dosyaya giden yollarla çalıştırın dbt run . default veritabanında dbt adlı bir tablo ve ve diamonds_pricesadlı diamonds_four_csdiamonds_list_colors iki görünüm oluşturur. dbt, bu görünüm ve tablo adlarını ilgili .sql dosya adlarından alır.

    dbt run --model models/diamonds_four_cs.sql models/diamonds_list_colors.sql models/diamonds_prices.sql
    
    ...
    ... | 1 of 3 START table model default.diamonds_four_cs.................... [RUN]
    ... | 1 of 3 OK created table model default.diamonds_four_cs............... [OK ...]
    ... | 2 of 3 START view model default.diamonds_list_colors................. [RUN]
    ... | 2 of 3 OK created view model default.diamonds_list_colors............ [OK ...]
    ... | 3 of 3 START view model default.diamonds_prices...................... [RUN]
    ... | 3 of 3 OK created view model default.diamonds_prices................. [OK ...]
    ... |
    ... | Finished running 1 table model, 2 view models ...
    
    Completed successfully
    
    Done. PASS=3 WARN=0 ERROR=0 SKIP=0 TOTAL=3
    
  18. Yeni görünümlerle ilgili bilgileri listelemek ve tablo ile görünümlerden tüm satırları seçmek için aşağıdaki SQL kodunu çalıştırın.

    Bir kümeye bağlanıyorsanız, bu SQL kodunu, not defteri için varsayılan dil olarak SQL belirterek kümeye bağlı bir not defterinden çalıştırabilirsiniz. SQL ambarlarına bağlanıyorsanız, bu SQL kodunu bir sorgudan çalıştırabilirsiniz.

    SHOW views IN default
    
    +-----------+----------------------+-------------+
    | namespace | viewName             | isTemporary |
    +===========+======================+=============+
    | default   | diamonds_list_colors | false       |
    +-----------+----------------------+-------------+
    | default   | diamonds_prices      | false       |
    +-----------+----------------------+-------------+
    
    SELECT * FROM diamonds_four_cs
    
    +-------+---------+-------+---------+
    | carat | cut     | color | clarity |
    +=======+=========+=======+=========+
    | 0.23  | Ideal   | E     | SI2     |
    +-------+---------+-------+---------+
    | 0.21  | Premium | E     | SI1     |
    +-------+---------+-------+---------+
    ...
    
    SELECT * FROM diamonds_list_colors
    
    +-------+
    | color |
    +=======+
    | D     |
    +-------+
    | E     |
    +-------+
    ...
    
    SELECT * FROM diamonds_prices
    
    +-------+---------+
    | color | price   |
    +=======+=========+
    | J     | 5323.82 |
    +-------+---------+
    | I     | 5091.87 |
    +-------+---------+
    ...
    

2. Adım: Daha karmaşık modeller oluşturma ve çalıştırma

Bu adımda, bir dizi ilgili veri tablosu için daha karmaşık modeller oluşturursunuz. Bu veri tablolarında altı maçlık bir sezonda oynayan üç takımın kurgusal bir spor ligi hakkında bilgiler yer alır. Bu yordam veri tablolarını oluşturur, modelleri oluşturur ve modelleri çalıştırır.

  1. Gerekli veri tablolarını oluşturmak için aşağıdaki SQL kodunu çalıştırın.

    Bir kümeye bağlanıyorsanız, bu SQL kodunu, not defteri için varsayılan dil olarak SQL belirterek kümeye bağlı bir not defterinden çalıştırabilirsiniz. SQL ambarlarına bağlanıyorsanız, bu SQL kodunu bir sorgudan çalıştırabilirsiniz.

    Bu adımdaki tablo ve görünümler, bunları bu örneğin bir parçası olarak tanımlamaya yardımcı olmak için ile zzz_ başlar. Kendi tablolarınız ve görünümleriniz için bu deseni izlemeniz gerekmez.

    DROP TABLE IF EXISTS zzz_game_opponents;
    DROP TABLE IF EXISTS zzz_game_scores;
    DROP TABLE IF EXISTS zzz_games;
    DROP TABLE IF EXISTS zzz_teams;
    
    CREATE TABLE zzz_game_opponents (
    game_id INT,
    home_team_id INT,
    visitor_team_id INT
    ) USING DELTA;
    
    INSERT INTO zzz_game_opponents VALUES (1, 1, 2);
    INSERT INTO zzz_game_opponents VALUES (2, 1, 3);
    INSERT INTO zzz_game_opponents VALUES (3, 2, 1);
    INSERT INTO zzz_game_opponents VALUES (4, 2, 3);
    INSERT INTO zzz_game_opponents VALUES (5, 3, 1);
    INSERT INTO zzz_game_opponents VALUES (6, 3, 2);
    
    -- Result:
    -- +---------+--------------+-----------------+
    -- | game_id | home_team_id | visitor_team_id |
    -- +=========+==============+=================+
    -- | 1       | 1            | 2               |
    -- +---------+--------------+-----------------+
    -- | 2       | 1            | 3               |
    -- +---------+--------------+-----------------+
    -- | 3       | 2            | 1               |
    -- +---------+--------------+-----------------+
    -- | 4       | 2            | 3               |
    -- +---------+--------------+-----------------+
    -- | 5       | 3            | 1               |
    -- +---------+--------------+-----------------+
    -- | 6       | 3            | 2               |
    -- +---------+--------------+-----------------+
    
    CREATE TABLE zzz_game_scores (
    game_id INT,
    home_team_score INT,
    visitor_team_score INT
    ) USING DELTA;
    
    INSERT INTO zzz_game_scores VALUES (1, 4, 2);
    INSERT INTO zzz_game_scores VALUES (2, 0, 1);
    INSERT INTO zzz_game_scores VALUES (3, 1, 2);
    INSERT INTO zzz_game_scores VALUES (4, 3, 2);
    INSERT INTO zzz_game_scores VALUES (5, 3, 0);
    INSERT INTO zzz_game_scores VALUES (6, 3, 1);
    
    -- Result:
    -- +---------+-----------------+--------------------+
    -- | game_id | home_team_score | visitor_team_score |
    -- +=========+=================+====================+
    -- | 1       | 4               | 2                  |
    -- +---------+-----------------+--------------------+
    -- | 2       | 0               | 1                  |
    -- +---------+-----------------+--------------------+
    -- | 3       | 1               | 2                  |
    -- +---------+-----------------+--------------------+
    -- | 4       | 3               | 2                  |
    -- +---------+-----------------+--------------------+
    -- | 5       | 3               | 0                  |
    -- +---------+-----------------+--------------------+
    -- | 6       | 3               | 1                  |
    -- +---------+-----------------+--------------------+
    
    CREATE TABLE zzz_games (
    game_id INT,
    game_date DATE
    ) USING DELTA;
    
    INSERT INTO zzz_games VALUES (1, '2020-12-12');
    INSERT INTO zzz_games VALUES (2, '2021-01-09');
    INSERT INTO zzz_games VALUES (3, '2020-12-19');
    INSERT INTO zzz_games VALUES (4, '2021-01-16');
    INSERT INTO zzz_games VALUES (5, '2021-01-23');
    INSERT INTO zzz_games VALUES (6, '2021-02-06');
    
    -- Result:
    -- +---------+------------+
    -- | game_id | game_date  |
    -- +=========+============+
    -- | 1       | 2020-12-12 |
    -- +---------+------------+
    -- | 2       | 2021-01-09 |
    -- +---------+------------+
    -- | 3       | 2020-12-19 |
    -- +---------+------------+
    -- | 4       | 2021-01-16 |
    -- +---------+------------+
    -- | 5       | 2021-01-23 |
    -- +---------+------------+
    -- | 6       | 2021-02-06 |
    -- +---------+------------+
    
    CREATE TABLE zzz_teams (
    team_id INT,
    team_city VARCHAR(15)
    ) USING DELTA;
    
    INSERT INTO zzz_teams VALUES (1, "San Francisco");
    INSERT INTO zzz_teams VALUES (2, "Seattle");
    INSERT INTO zzz_teams VALUES (3, "Amsterdam");
    
    -- Result:
    -- +---------+---------------+
    -- | team_id | team_city     |
    -- +=========+===============+
    -- | 1       | San Francisco |
    -- +---------+---------------+
    -- | 2       | Seattle       |
    -- +---------+---------------+
    -- | 3       | Amsterdam     |
    -- +---------+---------------+
    
  2. İlk modeli oluşturun: Sağ üst köşedeki (Yeni Dosya Oluştur) seçeneğine tıklayın.Yeni Dosya Oluştur simgesi

  3. Metin düzenleyicisinde aşağıdaki SQL deyimini girin. Bu deyim, takım adları ve puanlar gibi her oyunun ayrıntılarını sağlayan bir tablo oluşturur. blok, config dbt'ye veritabanında bu deyimi temel alan bir tablo oluşturmasını emreder.

    -- Create a table that provides full details for each game, including
    -- the game ID, the home and visiting teams' city names and scores,
    -- the game winner's city name, and the game date.
    
    {{ config(
      materialized='table',
      file_format='delta'
    ) }}
    
    -- Step 4 of 4: Replace the visitor team IDs with their city names.
    select
      game_id,
      home,
      t.team_city as visitor,
      home_score,
      visitor_score,
      -- Step 3 of 4: Display the city name for each game's winner.
      case
        when
          home_score > visitor_score
            then
              home
        when
          visitor_score > home_score
            then
              t.team_city
      end as winner,
      game_date as date
    from (
      -- Step 2 of 4: Replace the home team IDs with their actual city names.
      select
        game_id,
        t.team_city as home,
        home_score,
        visitor_team_id,
        visitor_score,
        game_date
      from (
        -- Step 1 of 4: Combine data from various tables (for example, game and team IDs, scores, dates).
        select
          g.game_id,
          go.home_team_id,
          gs.home_team_score as home_score,
          go.visitor_team_id,
          gs.visitor_team_score as visitor_score,
          g.game_date
        from
          zzz_games as g,
          zzz_game_opponents as go,
          zzz_game_scores as gs
        where
          g.game_id = go.game_id and
          g.game_id = gs.game_id
      ) as all_ids,
        zzz_teams as t
      where
        all_ids.home_team_id = t.team_id
    ) as visitor_ids,
      zzz_teams as t
    where
      visitor_ids.visitor_team_id = t.team_id
    order by game_date desc
    
  4. Farklı Kaydet'e tıklayın.

  5. Dosya adı olarak girin models/zzz_game_details.sql ve Oluştur'a tıklayın.

  6. İkinci bir model oluşturun: Sağ üst köşedeki (Yeni Dosya Oluştur) seçeneğine tıklayın.Yeni Dosya Oluştur simgesi

  7. Metin düzenleyicisinde aşağıdaki SQL deyimini girin. Bu deyim, sezonun takım galibiyet kayıtlarını listeleyen bir görünüm oluşturur.

    -- Create a view that summarizes the season's win and loss records by team.
    
    -- Step 2 of 2: Calculate the number of wins and losses for each team.
    select
      winner as team,
      count(winner) as wins,
      -- Each team played in 4 games.
      (4 - count(winner)) as losses
    from (
      -- Step 1 of 2: Determine the winner and loser for each game.
      select
        game_id,
        winner,
        case
          when
            home = winner
              then
                visitor
          else
            home
        end as loser
      from zzz_game_details
    )
    group by winner
    order by wins desc
    
  8. Farklı Kaydet'e tıklayın.

  9. Dosya adı olarak girin models/zzz_win_loss_records.sql ve Oluştur'a tıklayın.

  10. Modelleri çalıştırma: Komut satırında, komutu önceki iki dosyaya giden yollarla çalıştırın dbt run . default Veritabanında (proje ayarlarınızda belirtildiği gibi), dbt adlı bir tablo ve adlı zzz_game_detailszzz_win_loss_recordsbir görünüm oluşturur. dbt, bu görünüm ve tablo adlarını ilgili .sql dosya adlarından alır.

    dbt run --model models/zzz_game_details.sql models/zzz_win_loss_records.sql
    
    ...
    ... | 1 of 2 START table model default.zzz_game_details.................... [RUN]
    ... | 1 of 2 OK created table model default.zzz_game_details............... [OK ...]
    ... | 2 of 2 START view model default.zzz_win_loss_records................. [RUN]
    ... | 2 of 2 OK created view model default.zzz_win_loss_records............ [OK ...]
    ... |
    ... | Finished running 1 table model, 1 view model ...
    
    Completed successfully
    
    Done. PASS=2 WARN=0 ERROR=0 SKIP=0 TOTAL=2
    
  11. Yeni görünüm hakkındaki bilgileri listelemek ve tablo ile görünümdeki tüm satırları seçmek için aşağıdaki SQL kodunu çalıştırın.

    Bir kümeye bağlanıyorsanız, bu SQL kodunu, not defteri için varsayılan dil olarak SQL belirterek kümeye bağlı bir not defterinden çalıştırabilirsiniz. SQL ambarlarına bağlanıyorsanız, bu SQL kodunu bir sorgudan çalıştırabilirsiniz.

    SHOW VIEWS FROM default LIKE 'zzz_win_loss_records';
    
    +-----------+----------------------+-------------+
    | namespace | viewName             | isTemporary |
    +===========+======================+=============+
    | default   | zzz_win_loss_records | false       |
    +-----------+----------------------+-------------+
    
    SELECT * FROM zzz_game_details;
    
    +---------+---------------+---------------+------------+---------------+---------------+------------+
    | game_id | home          | visitor       | home_score | visitor_score | winner        | date       |
    +=========+===============+===============+============+===============+===============+============+
    | 1       | San Francisco | Seattle       | 4          | 2             | San Francisco | 2020-12-12 |
    +---------+---------------+---------------+------------+---------------+---------------+------------+
    | 2       | San Francisco | Amsterdam     | 0          | 1             | Amsterdam     | 2021-01-09 |
    +---------+---------------+---------------+------------+---------------+---------------+------------+
    | 3       | Seattle       | San Francisco | 1          | 2             | San Francisco | 2020-12-19 |
    +---------+---------------+---------------+------------+---------------+---------------+------------+
    | 4       | Seattle       | Amsterdam     | 3          | 2             | Seattle       | 2021-01-16 |
    +---------+---------------+---------------+------------+---------------+---------------+------------+
    | 5       | Amsterdam     | San Francisco | 3          | 0             | Amsterdam     | 2021-01-23 |
    +---------+---------------+---------------+------------+---------------+---------------+------------+
    | 6       | Amsterdam     | Seattle       | 3          | 1             | Amsterdam     | 2021-02-06 |
    +---------+---------------+---------------+------------+---------------+---------------+------------+
    
    SELECT * FROM zzz_win_loss_records;
    
    +---------------+------+--------+
    | team          | wins | losses |
    +===============+======+========+
    | Amsterdam     | 3    | 1      |
    +---------------+------+--------+
    | San Francisco | 2    | 2      |
    +---------------+------+--------+
    | Seattle       | 1    | 3      |
    +---------------+------+--------+
    

3. Adım: Test oluşturma ve çalıştırma

Bu adımda, modelleriniz hakkında yaptığınız onaylar olan testler oluşturursunuz. Bu testleri çalıştırdığınızda dbt, projenizdeki her testin başarılı olup olmadığını veya başarısız olup olmadığını bildirir.

İki tür test vardır. YAML ile yazılan şema testleri, onay geçirmeyen kayıtların sayısını döndürür. Bu sayı sıfır olduğunda, tüm kayıtlar geçer, bu nedenle testler geçer. Veri testleri , geçmesi için sıfır kayıt döndürmesi gereken belirli sorgulardır.

  1. Şema testlerini oluşturun: Sağ üst köşedeki (Yeni Dosya Oluştur) seçeneğine tıklayın.Yeni Dosya Oluştur simgesi

  2. Metin düzenleyicisinde aşağıdaki içeriği girin. Bu dosya, belirtilen sütunların benzersiz değerlere sahip olup olmadığını, null olmadığını, yalnızca belirtilen değerlere veya bir bileşimine sahip olup olmadığını belirleyen şema testlerini içerir.

    version: 2
    
    models:
      - name: zzz_game_details
        columns:
          - name: game_id
            tests:
              - unique
              - not_null
          - name: home
            tests:
              - not_null
              - accepted_values:
                  values: ['Amsterdam', 'San Francisco', 'Seattle']
          - name: visitor
            tests:
              - not_null
              - accepted_values:
                  values: ['Amsterdam', 'San Francisco', 'Seattle']
          - name: home_score
            tests:
              - not_null
          - name: visitor_score
            tests:
              - not_null
          - name: winner
            tests:
              - not_null
              - accepted_values:
                  values: ['Amsterdam', 'San Francisco', 'Seattle']
          - name: date
            tests:
              - not_null
      - name: zzz_win_loss_records
        columns:
          - name: team
            tests:
              - unique
              - not_null
              - relationships:
                  to: ref('zzz_game_details')
                  field: home
          - name: wins
            tests:
              - not_null
          - name: losses
            tests:
              - not_null
    
  3. Farklı Kaydet'e tıklayın.

  4. Dosya adı olarak yazın models/schema.ymlve Oluştur'a tıklayın.

  5. İlk veri testini oluşturun: Sağ üst köşedeki (Yeni Dosya Oluştur) seçeneğine tıklayın.Yeni Dosya Oluştur simgesi

  6. Metin düzenleyicisinde aşağıdaki SQL deyimini girin. Bu dosya, normal sezonun dışında herhangi bir oyun olup olmadığını belirlemek için bir veri testi içerir.

    -- This season's games happened between 2020-12-12 and 2021-02-06.
    -- For this test to pass, this query must return no results.
    
    select date
    from zzz_game_details
    where date < '2020-12-12'
    or date > '2021-02-06'
    
  7. Farklı Kaydet'e tıklayın.

  8. Dosya adı olarak yazın tests/zzz_game_details_check_dates.sqlve Oluştur'a tıklayın.

  9. İkinci bir veri testi oluşturun: Sağ üst köşedeki (Yeni Dosya Oluştur) seçeneğine tıklayın.Yeni Dosya Oluştur simgesi

  10. Metin düzenleyicisinde aşağıdaki SQL deyimini girin. Bu dosya, herhangi bir puanın negatif olup olmadığını veya herhangi bir oyunun bağlı olup olmadığını belirlemek için bir veri testi içerir.

    -- This sport allows no negative scores or tie games.
    -- For this test to pass, this query must return no results.
    
    select home_score, visitor_score
    from zzz_game_details
    where home_score < 0
    or visitor_score < 0
    or home_score = visitor_score
    
  11. Farklı Kaydet'e tıklayın.

  12. Dosya adı olarak yazın tests/zzz_game_details_check_scores.sqlve Oluştur'a tıklayın.

  13. Üçüncü bir veri testi oluşturun: Sağ üst köşedeki (Yeni Dosya Oluştur) seçeneğine tıklayın.Yeni Dosya Oluştur simgesi

  14. Metin düzenleyicisinde aşağıdaki SQL deyimini girin. Bu dosya, herhangi bir takımın olumsuz galibiyet veya kayıp kayıtlarına sahip olup olmadığını, oynanan oyunlardan daha fazla galibiyet veya kayıp kaydı olup olmadığını ya da izin verilenden daha fazla oyun oynayıp oynamadığını belirlemek için bir veri testi içerir.

    -- Each team participated in 4 games this season.
    -- For this test to pass, this query must return no results.
    
    select wins, losses
    from zzz_win_loss_records
    where wins < 0 or wins > 4
    or losses < 0 or losses > 4
    or (wins + losses) > 4
    
  15. Farklı Kaydet'e tıklayın.

  16. Dosya adı olarak yazın tests/zzz_win_loss_records_check_records.sqlve Oluştur'a tıklayın.

  17. Testleri çalıştırma: Komut satırında komutunu dbt test çalıştırın.

4. Adım: Temizleme

Aşağıdaki SQL kodunu çalıştırarak bu örnek için oluşturduğunuz tabloları ve görünümleri silebilirsiniz.

Bir kümeye bağlanıyorsanız, bu SQL kodunu, not defteri için varsayılan dil olarak SQL belirterek kümeye bağlı bir not defterinden çalıştırabilirsiniz. SQL ambarlarına bağlanıyorsanız, bu SQL kodunu bir sorgudan çalıştırabilirsiniz.

DROP TABLE zzz_game_opponents;
DROP TABLE zzz_game_scores;
DROP TABLE zzz_games;
DROP TABLE zzz_teams;
DROP TABLE zzz_game_details;
DROP VIEW zzz_win_loss_records;

DROP TABLE diamonds;
DROP TABLE diamonds_four_cs;
DROP VIEW diamonds_list_colors;
DROP VIEW diamonds_prices;

Sonraki adımlar

  • dbt modelleri hakkında daha fazla bilgi edinin.
  • dbt projelerinizi test etmeyi öğrenin.
  • Dbt projelerinizde SQL programlaması için şablon oluşturma dili olan Jinja'yı kullanmayı öğrenin.
  • dbt en iyi yöntemleri hakkında bilgi edinin.

Ek kaynaklar