dbt Cloud'a bağlanma
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ğlanma.
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ğlantısı kullanarak dbt Cloud'a bağlanma
Bu bölümde, İş Ortağı Bağlantısı kullanarak 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ğlantısı'nı kullanarak dbt Bulut'a bağlanmak için İş Ortağı Bağlantısı kullanarak veri hazırlama iş ortaklarına bağlanma 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ğı Connect, 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ğlantısı'nı kullanarak dbt Cloud'a bağlanmak için aşağıdakileri yapın:
İş Ortağı Bağlantısı'nı kullanarak veri hazırlama iş ortaklarına bağlanın.
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ülenmezse ikinci açılan menüden Databricks İş Ortağı Bağlantısı Deneme Sürümü projesini seçin.
İpucu
Projenizin ayarlarını görüntülemek için "üç şerit" veya "hamburger" menüsüne tıklayın , Hesap Ayarları > Projeleri'ne tıklayın ve projenin adına tıklayın. Bağlantı ayarlarını görüntülemek için Bağlantı'nı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ğlantısı 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ğlantısı, 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.
Kenar çubuğunda Katalog'a tıklayın
.
Sağ üstteki açılan listeden SQL ambarını (DBT_CLOUD_ENDPOINT) seçin.
- Katalog Gezgini'nin altında tablonuzun veritabanını içeren kataloğu seçin.
- Tablonuzu içeren veritabanını seçin.
- 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.
İzinler'e tıklayın.
Ver'e tıklayın.
Birden çok kullanıcı veya grup eklemek için Tür için DBT_CLOUD_USER'ı seçin. Bu, İş Ortağı Connect'in önceki bölümde sizin için oluşturduğu Azure Databricks hizmet sorumlusudur.
İpucu
DBT_CLOUD_USER görmüyorsanız
DBT_CLOUD_USER
ve öğesini seçerek
SELECT
yalnızca okuma erişimi verinREAD METADATA
.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ğlanma
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ı.
- İşlem yapılandırma başvurusu.
- SQL ambarı oluşturma.
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 işlem kaynağının bağlantı ayrıntılarını alın.
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 çalışma alanı kullanıcıları için Azure Databricks kişisel erişim belirteçleri'ndeki adımları izleyin.
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.
- dbt Cloud'da oturum açın.
- Ayarlar simgesine ve ardından Hesap Ayarları'na tıklayın.
- Yeni Proje'ye tıklayın.
- Ad alanına projeniz için benzersiz bir ad girin ve Devam'a tıklayın.
-
Bir bağlantı seçin açılan menüsünden bir Azure Databricks hesaplama bağlantısı seçin veya bir yeni bağlantı oluşturun:
Yeni bağlantı ekletıklayın.
Yeni bağlantı ekle sihirbazı yeni bir sekmede açılır.
Databricks'e tıklayın ve ardından İleri'ye tıklayın.
Not
Databricks,
dbt-databricks
yerine Unity Kataloğu'nu destekleyen öğesinin kullanılmasınıdbt-spark
önerir. Varsayılan olarak, yeni projeler kullanırdbt-databricks
. Var olan bir projeyi 'a geçirmek içindbt-databricks
dbt belgelerinde dbt-spark'tan dbt-databricks'e geçiş bölümüne bakın.Ayarlar'ın altında, Sunucu Ana Bilgisayar Adı için gereksinimlerden sunucu ana bilgisayar adı değerini girin.
HTTP Yolu için gereksinimlerden HTTP yolu değerini girin.
Çalışma alanınız Unity Kataloğu etkinse, İsteğe Bağlı Ayarlar altında dbt'nin kullanması için kataloğun adını girin.
Kaydet’etıklayın.
Yeni proje sihirbazına geri dönün ve Bağlantı açılan menüsünden az önce oluşturduğunuz bağlantıyı seçin.
- Geliştirme Kimlik Bilgileri'nin altında, Belirteç için gereksinimlerden kişisel erişim belirtecini veya Microsoft Entra Id belirtecini girin.
- Şemaiçin, dbt'nin tabloları ve görünümleri oluşturmasını istediğiniz şemanın adını girin.
- Bağlantıyı Sına’ya tıklayın.
- Test başarıyla tamamlanırsa Kaydetöğesine tıklayın.
Daha fazla bilgi için dbt web sitesindeki Databricks ODBC'ye Bağlanma bölümüne bakın.
İpucu
Bu projenin ayarlarını görüntülemek veya değiştirmek ya da projeyi tamamen silmek için ayarlar simgesine, Hesap Ayarları > Projeleri'ne 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 olan modelleriselect
. Bu yordam, Örnek veri kümelerindeki diamonds
örnek 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.
Proje açıkken, kullanıcı arabiriminin üst kısmındaki Geliştir'e tıklayın.
Dbt projelerini başlat'a tıklayın.
İşleme ve eşitleme'ye tıklayın, bir işleme iletisi girin ve ardından İşleme'ye tıklayın.
Dal oluştur'a tıklayın, dalınız için bir ad girin ve gönder'e tıklayın.
İlk modeli oluşturun: Yeni Dosya Oluştur'a tıklayın.
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
İpucu
Artımlı strateji gibi
config
ekmerge
seçenekler için dbt belgelerindeki Databricks yapılandırmaları bölümüne bakın.Farklı Kaydet'e tıklayın.
Dosya adı olarak girin
models/diamonds_four_cs.sql
ve Oluştur'a tıklayın.İkinci bir model oluşturun: Sağ üst köşedeki (Yeni Dosya Oluştur) seçeneğine tıklayın.
Metin düzenleyicisinde aşağıdaki SQL deyimini girin. Bu deyim, tablodaki
colors
diamonds_four_cs
sütundan benzersiz değerleri seçerek sonuçları önce alfabetik düzende sıralar. Blok olmadığındanconfig
, 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
Farklı Kaydet'e tıklayın.
Dosya adı olarak yazın
models/diamonds_list_colors.sql
ve Oluştur'a tıklayın.Üçüncü bir model oluşturma: Sağ üst köşedeki (Yeni Dosya Oluştur) seçeneğine tıklayın.
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
Farklı Kaydet'e tıklayın.
Dosya adı olarak girin
models/diamonds_prices.sql
ve Oluştur'a tıklayın.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 vediamonds_four_cs
adlıdiamonds_list_colors
diamonds_prices
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
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.
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 | -- +---------+---------------+
İlk modeli oluşturun: Sağ üst köşedeki (Yeni Dosya Oluştur) seçeneğine tıklayın.
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
Farklı Kaydet'e tıklayın.
Dosya adı olarak girin
models/zzz_game_details.sql
ve Oluştur'a tıklayın.İkinci bir model oluşturun: Sağ üst köşedeki (Yeni Dosya Oluştur) seçeneğine tıklayın.
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
Farklı Kaydet'e tıklayın.
Dosya adı olarak girin
models/zzz_win_loss_records.sql
ve Oluştur'a tıklayın.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_details
zzz_win_loss_records
bir 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
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.
Şema testlerini oluşturun: Sağ üst köşedeki (Yeni Dosya Oluştur) seçeneğine tıklayın.
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
Farklı Kaydet'e tıklayın.
Dosya adı olarak yazın
models/schema.yml
ve Oluştur'a tıklayın.İlk veri testini oluşturun: Sağ üst köşedeki (Yeni Dosya Oluştur) seçeneğine tıklayın.
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'
Farklı Kaydet'e tıklayın.
Dosya adı olarak yazın
tests/zzz_game_details_check_dates.sql
ve Oluştur'a tıklayın.İkinci bir veri testi oluşturun: Sağ üst köşedeki (Yeni Dosya Oluştur) seçeneğine tıklayın.
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
Farklı Kaydet'e tıklayın.
Dosya adı olarak yazın
tests/zzz_game_details_check_scores.sql
ve Oluştur'a tıklayın.Üçüncü bir veri testi oluşturun: Sağ üst köşedeki (Yeni Dosya Oluştur) seçeneğine tıklayın.
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
Farklı Kaydet'e tıklayın.
Dosya adı olarak yazın
tests/zzz_win_loss_records_check_records.sql
ve Oluştur'a tıklayın.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.