Bagikan melalui


Sambungkan ke dbt Cloud

dbt (alat pembuatan data) adalah lingkungan pengembangan yang memungkinkan analis data dan insinyur data mengubah data hanya dengan menulis pernyataan pilihan. dbt menangani pengubahan pernyataan pilihan ini menjadi tabel dan tampilan. dbt mengompilasikan kode Anda menjadi SQL mentah lalu menjalankan kode tersebut pada database yang ditentukan di Azure Databricks. dbt mendukung pola pengodean kolaboratif dan praktik terbaik seperti kontrol versi, dokumentasi, dan modularitas.

dbt tidak mengekstrak atau memuat data. dbt hanya berfokus pada langkah transformasi, menggunakan arsitektur "transform after load". dbt mengasumsikan bahwa Anda sudah memiliki salinan data di database Anda.

Artikel ini berfokus pada dbt Cloud. dbt Cloud dilengkapi dengan dukungan siap pakai untuk penjadwalan pekerjaan, CI/CD, penyajian dokumentasi, pemantauan dan peringatan, serta lingkungan pengembangan terintegrasi (IDE).

Tersedia juga versi lokal dbt yang disebut dbt Core. dbt Core memungkinkan Anda menulis kode dbt di editor teks atau IDE pilihan Anda di mesin pengembangan lokal lalu menjalankan dbt dari baris perintah. dbt Core mencakup dbt Command Line Interface (CLI). dbt CLI gratis untuk digunakan dan sumber terbuka. Untuk informasi selengkapnya, lihat Menyambungkan ke dbt Core.

Karena dbt Cloud dan dbt Core dapat menggunakan repositori git yang dihosting (misalnya, di GitHub, GitLab, atau BitBucket), Anda dapat menggunakan dbt Cloud untuk membuat proyek dbt dan kemudian membuatnya tersedia untuk pengguna dbt Cloud dan dbt Core Anda. Untuk informasi lebih lanjut, lihat Membuat proyek dbt dan Membuat proyek yang ada di situs web dbt.

Untuk gambaran umum dbt, tonton video YouTube berikut (26 menit).

Menyambungkan ke dbt Cloud menggunakan Partner Connect

Bagian ini menjelaskan cara menyambungkan gudang Databricks SQL ke dbt Cloud menggunakan Partner Connect, lalu memberikan dbt Cloud akses baca ke data Anda.

Perbedaan antara koneksi standar dan dbt Cloud

Untuk menyambungkan ke dbt Cloud menggunakan Partner Connect, Anda mengikuti langkah-langkah dalam Menyambungkan ke mitra persiapan data menggunakan Partner Connect. Koneksi dbt Cloud berbeda dari persiapan data standar dan koneksi transformasi dengan cara berikut:

  • Selain perwakilan layanan dan token akses pribadi, Partner Connect membuat gudang SQL (sebelumnya titik akhir SQL) bernama DBT_CLOUD_ENDPOINT secara default.

Langkah-langkah untuk menyambungkan

Untuk menyambungkan ke dbt Cloud menggunakan Partner Connect, lakukan hal berikut:

  1. Sambungkan ke mitra persiapan data menggunakan Partner Connect.

  2. Setelah Anda tersambung ke dbt Cloud, dasbor dbt Cloud Anda muncul. Untuk menjelajahi proyek Cloud dbt Anda, di bilah menu, di samping logo dbt, pilih nama akun dbt Anda dari drop down pertama jika tidak ditampilkan, lalu pilih proyek Percobaan Partner Connect Databricks dari menu drop down kedua jika tidak ditampilkan.

    Tip

    Untuk melihat pengaturan proyek Anda, klik menu “tiga garis” atau “hamburger”, klik Pengaturan Akun > Proyek, dan klik nama proyek. Untuk melihat pengaturan sambungan, klik link di samping Sambungan. Untuk mengubah pengaturan apa pun, klik Edit.

    Untuk melihat informasi token akses privat Azure Databricks untuk proyek ini, klik ikon “orang” pada bilah menu, klik Profil > Infromasi Masuk > Uji Coba Partner Connect Databricks, dan klik nama proyek. Untuk membuat perubahan, klik Edit.

Langkah-langkah untuk memberi dbt Cloud akses baca ke data Anda

Partner Connect memberikan izin hanya buat untuk perwakilan layanan DBT_CLOUD_USER hanya pada katalog default. Ikuti langkah-langkah berikut di ruang kerja Azure Databricks Anda untuk memberikan akses baca utama layanan DBT_CLOUD_USER ke data yang Anda pilih.

Peringatan

Anda dapat menyesuaikan langkah-langkah ini untuk memberi dbt Cloud akses tambahan di seluruh katalog, database, dan tabel dalam ruang kerja Anda. Namun, sebagai praktik terbaik keamanan, Databricks sangat menyarankan agar Anda memberikan akses hanya ke tabel individual yang Anda perlukan untuk bekerja dengan perwakilan layanan DBT_CLOUD_USER dan hanya membaca akses ke tabel tersebut.

  1. Klik Ikon katalog Katalog di bilah samping.

  2. Pilih gudang SQL (DBT_CLOUD_ENDPOINT) di daftar drop-down di kanan atas.

    Memilih gudang

    1. Di bawah Penjelajah Katalog, pilih katalog yang berisi database untuk tabel Anda.
    2. Pilih database yang berisi tabel Anda.
    3. Pilih tabel Anda.

    Tip

    Jika Anda tidak melihat katalog, database, atau tabel Anda tercantum, masukkan bagian mana pun dari nama tersebut di kotak Pilih Katalog, Pilih Database, atau Filter tabel, masing-masing, untuk mempersempit daftar.

    Memfilter tabel

  3. Klik Izin.

  4. Klik Berikan.

  5. Untuk Ketik untuk menambahkan beberapa pengguna atau grup, pilih DBT_CLOUD_USER. Ini adalah perwakilan layanan Azure Databricks yang dibuat Partner Connect untuk Anda di bagian sebelumnya.

    Tip

    Jika Anda tidak melihat DBT_CLOUD_USER, mulailah mengetik DBT_CLOUD_USER di kotak Ketik untuk menambahkan beberapa pengguna atau grup hingga muncul dalam daftar, lalu pilih.

  6. Berikan akses baca hanya dengan memilih SELECT dan READ METADATA.

  7. Klik OK.

Ulangi langkah 4-9 untuk setiap tabel tambahan yang ingin Anda beri akses baca dbt Cloud.

Memecahkan masalah koneksi dbt Cloud

Jika seseorang menghapus proyek di dbt Cloud untuk akun ini, dan Anda mengeklik ubin dbt, pesan kesalahan akan muncul, yang menyatakan bahwa proyek tidak dapat ditemukan. Untuk memperbaikinya, klik Hapus sambungan, lalu mulai dari awal prosedur ini untuk membuat sambungan lagi.

Menyambungkan ke dbt Cloud secara manual

Bagian ini menjelaskan cara menyambungkan kluster Azure Databricks atau gudang Databricks SQL di ruang kerja Azure Databricks Anda ke dbt Cloud.

Penting

Databricks merekomendasikan untuk terhubung ke gudang SQL. Jika Anda tidak memiliki hak akses Databricks SQL, atau jika Anda ingin menjalankan model Python, Anda dapat terhubung ke kluster sebagai gantinya.

Persyaratan

  • Kluster atau gudang SQL di ruang kerja Azure Databricks Anda.

  • Detail koneksi untuk kluster atau gudang SQL Anda, khususnya nilai Nama Host Server, Port, dan Jalur HTTP.

  • Token akses pribadi Azure Databricks atau token ID Microsoft Entra (sebelumnya Azure Active Directory). Untuk membuat token akses pribadi, lakukan hal berikut:

    1. Di ruang kerja Azure Databricks Anda, klik nama pengguna Azure Databricks Anda di bilah atas, lalu pilih Pengaturan dari menu drop-down.
    2. Klik Pengembang.
    3. Di samping Token akses, klik Kelola.
    4. Klik Buat token baru.
    5. (Opsional) Masukkan komentar yang membantu Anda mengidentifikasi token ini di masa mendatang, dan mengubah masa pakai default token selama 90 hari. Untuk membuat token tanpa masa pakai (tidak disarankan), biarkan kotak Seumur Hidup (hari) kosong (kosong).
    6. Klik Buat.
    7. Salin token yang ditampilkan ke lokasi aman, lalu klik Selesai.

    Catatan

    Pastikan untuk menyimpan token yang disalin di lokasi yang aman. Jangan bagikan token yang Anda salin dengan orang lain. Jika Anda kehilangan token yang disalin, Anda tidak dapat meregenerasi token yang sama persis. Sebagai gantinya, Anda harus mengulangi prosedur ini untuk membuat token baru. Jika Anda kehilangan token yang disalin, atau Anda yakin bahwa token telah disusupi, Databricks sangat menyarankan agar Anda segera menghapus token tersebut dari ruang kerja Anda dengan mengklik ikon tempat sampah (Cabut) di samping token di halaman Token akses.

    Jika Anda tidak dapat membuat atau menggunakan token di ruang kerja, ini mungkin karena administrator ruang kerja Anda telah menonaktifkan token atau belum memberi Anda izin untuk membuat atau menggunakan token. Lihat administrator ruang kerja Anda atau topik berikut:

    Catatan

    Sebagai praktik terbaik keamanan, saat Anda mengautentikasi dengan alat, sistem, skrip, dan aplikasi otomatis, Databricks merekomendasikan agar Anda menggunakan token akses pribadi milik perwakilan layanan, bukan pengguna ruang kerja. Untuk membuat token untuk perwakilan layanan, lihat Mengelola token untuk perwakilan layanan.

  • Untuk menyambungkan dbt Cloud ke data yang dikelola oleh Unity Catalog, dbt versi 1.1 atau yang lebih baru.

    Langkah-langkah dalam artikel ini membuat lingkungan baru yang menggunakan versi dbt terbaru. Untuk informasi tentang meningkatkan versi dbt untuk lingkungan yang ada, lihat Meningkatkan ke versi terbaru dbt di Cloud dalam dokumentasi dbt.

Langkah 1: Daftar untuk dbt Cloud

Buka dbt Cloud - Daftar lalu masukkan email, nama, dan informasi perusahaan Anda. Buat kata sandi dan klik Buat akun saya.

Langkah 2: Membuat proyek dbt

Dalam langkah ini, Anda membuat proyek dbt, yang berisi koneksi ke kluster Azure Databricks atau gudang SQL, repositori yang berisi kode sumber Anda, dan satu atau beberapa lingkungan (seperti lingkungan pengujian dan produksi).

  1. Masuk ke dbt Cloud.

  2. Klik ikon pengaturan, lalu klik Pengaturan Akun.

  3. Klik Proyek Baru.

  4. Untuk Nama, masukkan nama unik untuk proyek Anda, lalu klik Lanjutkan.

  5. Untuk Pilih koneksi, klik Databricks, lalu klik Berikutnya.

  6. Untuk Nama, masukkan nama unik untuk koneksi ini.

  7. Untuk Pilih Adapter, klik Databricks (dbt-databricks).

    Catatan

    Databricks merekomendasikan penggunaan dbt-databricks, yang mendukung Unity Catalog, bukan dbt-spark. Secara default, proyek baru menggunakan dbt-databricks. Untuk memigrasikan proyek yang ada ke dbt-databricks, lihat Migrasi dari dbt-spark ke dbt-databricks dalam dokumentasi dbt.

  8. Di bawah Pengaturan, untuk Nama Host Server, masukkan nilai nama host server dari persyaratan.

  9. Untuk Jalur HTTP, masukkan nilai jalur HTTP dari persyaratan.

  10. Jika ruang kerja Anda diaktifkan oleh Katalog Unity, di bawah Pengaturan Opsional, masukkan nama katalog untuk dbt Cloud yang akan digunakan.

  11. Di bawah Kredensial Pengembangan, untuk Token, masukkan token akses pribadi atau token ID Microsoft Entra dari persyaratan.

  12. Untuk Skema, masukkan nama skema tempat Anda ingin dbt Cloud membuat tabel dan tampilan (misalnya, default).

  13. Klik Uji Koneksi.

  14. Jika pengujian berhasil, klik Berikutnya.

Untuk informasi selengkapnya, lihat Menyambungkan ke Databricks ODBC di situs dbt.

Tip

Untuk melihat atau mengubah pengaturan untuk proyek ini, atau untuk menghapus proyek sama sekali, klik ikon pengaturan, klik Proyek Pengaturan > Akun, dan klik nama proyek. Untuk mengubah pengaturan, klik Edit. Untuk menghapus proyek, klik Edit > Hapus Proyek.

Untuk melihat atau mengubah nilai token akses pribadi Azure Databricks Anda untuk proyek ini, klik ikon "orang", klik Kredensial > Profil, lalu klik nama proyek. Untuk membuat perubahan, klik Edit.

Setelah Anda tersambung ke kluster Azure Databricks atau gudang Databricks SQL, ikuti instruksi di layar untuk Menyiapkan Repositori, lalu klik Lanjutkan.

Setelah Anda menyiapkan repositori, ikuti petunjuk di layar untuk mengundang pengguna lalu klik Selesai. Atau klik Lewati & Selesai.

Tutorial

Di bagian ini, Anda menggunakan proyek dbt Cloud Anda untuk bekerja dengan beberapa data sampel. Bagian ini mengasumsikan bahwa Anda telah membuat proyek dan membuka dbt Cloud IDE untuk proyek tersebut.

Langkah 1: Membuat dan menjalankan model

Pada langkah ini, Anda menggunakan dbt Cloud IDE untuk membuat dan menjalankan model, yang merupakan selectpernyataan yang membuat tampilan baru (default) atau tabel baru dalam database, berdasarkan data yang ada dalam database yang sama. Prosedur ini membuat model berdasarkan tabel sampel diamonds dari himpunan data Sampel.

Gunakan kode berikut untuk membuat tabel ini.

DROP TABLE IF EXISTS diamonds;

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

Prosedur ini mengasumsikan tabel ini telah dibuat di database ruang kerja default Anda.

  1. Dengan proyek terbuka, klik Kembangkan di bagian atas UI.

  2. Klik Inisialisasi proyek dbt.

  3. Klik Terapkan dan sinkronkan, masukkan pesan penerapan, lalu klik Terapkan.

  4. Klik Buat cabang, masukkan nama untuk cabang Anda, lalu klik Kirim.

  5. Membuat model pertama: Klik Buat File Baru.

  6. Di editor teks, masukkan pernyataan SQL berikut. Pernyataan ini hanya memilih detail karat, potongan, warna, dan kejernihan untuk setiap berlian dari tabel diamonds. Blok config menginstruksikan dbt untuk membuat tabel dalam database berdasarkan pernyataan ini.

    {{ config(
      materialized='table',
      file_format='delta'
    ) }}
    
    select carat, cut, color, clarity
    from diamonds
    

    Tip

    Untuk opsi tambahan config seperti strategi inkremental merge , lihat Konfigurasi Databricks dalam dokumentasi dbt.

  7. Klik Simpan Sebagai.

  8. Untuk nama file, masukkan models/diamonds_four_cs.sql lalu klik Buat.

  9. Membuat model kedua: Klik Ikon Buat File Baru (Buat File Baru) di sudut kanan atas.

  10. Di editor teks, masukkan pernyataan SQL berikut. Pernyataan ini memilih nilai unik dari colors kolom dalam diamonds_four_cs tabel, mengurutkan hasil dalam urutan abjad pertama hingga terakhir. Karena tidak ada config blok, model ini menginstruksikan dbt untuk membuat tampilan dalam database berdasarkan pernyataan ini.

    select distinct color
    from diamonds_four_cs
    sort by color asc
    
  11. Klik Simpan Sebagai.

  12. Untuk nama file, masukkan models/diamonds_list_colors.sql, lalu klik Buat.

  13. Membuat model ketiga: Klik Ikon Buat File Baru (Buat File Baru) di sudut kanan atas.

  14. Di editor teks, masukkan pernyataan SQL berikut. Pernyataan ini rata-rata harga berlian berdasarkan warna, menyortir hasil dengan harga rata-rata dari tertinggi ke terendah. Model ini menginstruksikan dbt untuk membuat tampilan dalam database berdasarkan pernyataan ini.

    select color, avg(price) as price
    from diamonds
    group by color
    order by price desc
    
  15. Klik Simpan Sebagai.

  16. Untuk nama file, masukkan models/diamonds_prices.sql dan klik Buat.

  17. Jalankan model: Di baris perintah, jalankan dbt run perintah dengan jalur ke tiga file sebelumnya. Dalam default database, dbt membuat satu tabel bernama diamonds_four_cs dan dua tampilan bernama diamonds_list_colors dan diamonds_prices. dbt mendapatkan tampilan dan nama tabel ini dari nama file .sql terkait.

    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. Jalankan kode SQL berikut untuk mencantumkan informasi tentang tampilan baru dan untuk memilih semua baris dari tabel dan tampilan.

    Jika Anda tersambung ke kluster, Anda dapat menjalankan kode SQL ini dari buku catatan yang dilampirkan ke kluster, menentukan SQL sebagai bahasa default untuk buku catatan. Jika Anda menyambungkan ke gudang SQL, Anda dapat menjalankan kode SQL ini dari kueri.

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

Langkah 2: Membuat dan menjalankan model yang lebih kompleks

Pada langkah ini, Anda membuat model yang lebih kompleks untuk satu set tabel data terkait. Tabel data ini berisi informasi tentang liga olahraga fiktif dari tiga tim yang memainkan satu musim dengan enam pertandingan. Prosedur ini membuat tabel data, membuat model, dan menjalankan model.

  1. Jalankan kode SQL berikut untuk membuat tabel data yang diperlukan.

    Jika Anda tersambung ke kluster, Anda dapat menjalankan kode SQL ini dari buku catatan yang dilampirkan ke kluster, menentukan SQL sebagai bahasa default untuk buku catatan. Jika Anda menyambungkan ke gudang SQL, Anda dapat menjalankan kode SQL ini dari kueri.

    Tabel dan tampilan pada langkah ini dimulai dengan zzz_ untuk membantu mengidentifikasinya sebagai bagian dari contoh ini. Anda tidak perlu mengikuti pola ini untuk tabel dan tampilan Anda sendiri.

    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. Buat model pertama: Klik Ikon Buat File Baru (Buat File Baru) di sudut kanan atas.

  3. Di editor teks, masukkan pernyataan SQL berikut. Pernyataan ini membuat tabel yang memberikan detail setiap pertandingan, seperti nama dan skor tim. Blok config menginstruksikan dbt untuk membuat tabel dalam database berdasarkan pernyataan ini.

    -- 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. Klik Simpan Sebagai.

  5. Untuk nama file, masukkan models/zzz_game_details.sql lalu klik Buat.

  6. Membuat model kedua: Klik Ikon Buat File Baru (Buat File Baru) di sudut kanan atas.

  7. Di editor teks, masukkan pernyataan SQL berikut. Pernyataan ini membuat tampilan yang mencantumkan catatan menang-kalah tim untuk musim ini.

    -- 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. Klik Simpan Sebagai.

  9. Untuk nama file, masukkan models/zzz_win_loss_records.sql lalu klik Buat.

  10. Jalankan model: Di baris perintah, jalankan dbt run perintah dengan jalur ke dua file sebelumnya. Dalam database default (seperti yang ditentukan dalam pengaturan proyek Anda), dbt membuat satu tabel bernama zzz_game_details dan satu tampilan bernama zzz_win_loss_records. dbt mendapatkan tampilan dan nama tabel ini dari nama file .sql terkait.

    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. Jalankan kode SQL berikut untuk mencantumkan informasi tentang tampilan baru dan memilih semua baris dari tabel dan tampilan.

    Jika Anda tersambung ke kluster, Anda dapat menjalankan kode SQL ini dari buku catatan yang dilampirkan ke kluster, menentukan SQL sebagai bahasa default untuk buku catatan. Jika Anda menyambungkan ke gudang SQL, Anda dapat menjalankan kode SQL ini dari kueri.

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

Langkah 3: Membuat dan menjalankan pengujian

Pada langkah ini, Anda membuat pengujian, yang merupakan pernyataan yang Anda buat tentang model Anda. Saat Anda menjalankan pengujian ini, dbt memberi tahu Anda apakah setiap pengujian dalam proyek Anda lulus atau gagal.

Terdapat dua jenis pengujian. Pengujian skema, yang ditulis dalam YAML, mengembalikan jumlah catatan yang tidak lulus pernyataan. Ketika angka ini nol, semua catatan berhasil, maka pengujian pun berhasil. Pengujian data adalah kueri khusus yang harus mengembalikan nol catatan untuk lulus.

  1. Membuat pengujian skema: Klik Ikon Buat File Baru (Buat File Baru) di sudut kanan atas.

  2. Di editor teks, masukkan konten berikut. File ini mencakup pengujian skema yang menentukan apakah kolom yang ditentukan memiliki nilai unik, bukan null, hanya memiliki nilai yang ditentukan, atau kombinasi.

    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. Klik Simpan Sebagai.

  4. Untuk nama file, masukkan models/schema.yml, lalu klik Buat.

  5. Buat pengujian data pertama: Klik Ikon Buat File Baru (Buat File Baru) di sudut kanan atas.

  6. Di editor teks, masukkan pernyataan SQL berikut. File ini mencakup pengujian data untuk menentukan apakah ada pertandingan yang terjadi di luar musim reguler.

    -- 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. Klik Simpan Sebagai.

  8. Untuk nama file, masukkan tests/zzz_game_details_check_dates.sql, lalu klik Buat.

  9. Buat pengujian data kedua: Klik Ikon Buat File Baru (Buat File Baru) di sudut kanan atas.

  10. Di editor teks, masukkan pernyataan SQL berikut. File ini mencakup pengujian data untuk menentukan apakah ada skor negatif atau permainan apa pun yang terikat.

    -- 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. Klik Simpan Sebagai.

  12. Untuk nama file, masukkan tests/zzz_game_details_check_scores.sql, lalu klik Buat.

  13. Membuat pengujian data ketiga: Klik Ikon Buat File Baru (Buat File Baru) di sudut kanan atas.

  14. Di editor teks, masukkan pernyataan SQL berikut. File ini mencakup pengujian data untuk menentukan apakah ada tim yang memiliki catatan menang atau kalah negatif, memiliki lebih banyak catatan menang atau kalah daripada pertandingan yang dimainkan, atau memainkan lebih banyak pertandingan daripada yang diizinkan.

    -- 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. Klik Simpan Sebagai.

  16. Untuk nama file, masukkan tests/zzz_win_loss_records_check_records.sql, lalu klik Buat.

  17. Jalankan pengujian: Di baris perintah, jalankan dbt test perintah .

Langkah 4: Bersihkan

Anda dapat menghapus tabel dan tampilan yang Anda buat untuk contoh ini dengan menjalankan kode SQL berikut.

Jika Anda tersambung ke kluster, Anda dapat menjalankan kode SQL ini dari buku catatan yang dilampirkan ke kluster, menentukan SQL sebagai bahasa default untuk buku catatan. Jika Anda menyambungkan ke gudang SQL, Anda dapat menjalankan kode SQL ini dari kueri.

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;

Langkah berikutnya

  • Pelajari model dbt lebih lanjut.
  • Pelajari cara menguji proyek dbt Anda.
  • Pelajari cara menggunakan Jinja, bahasa pembuatan templat, untuk memprogram SQL dalam proyek dbt Anda.
  • Pelajari tentang praktik terbaik dbt.

Sumber Daya Tambahan: