Mengembangkan dan menyebarkan dependensi lintas gudang

Dalam artikel ini, Anda mempelajari cara memodelkan dan menyebarkan dependensi lintas gudang dengan menggunakan proyek database SQL di Visual Studio Code. Anda memulai dari dua proyek gudang yang sudah ada dan mengonfigurasi ketergantungan satu arah di antara keduanya dengan menggunakan referensi basis data.

Artikel ini mengembangkan konsep dalam Develop warehouse projects in Visual Studio Code, dan mengasumsikan Anda sudah terbiasa membangun dan menerbitkan satu proyek gudang.

Prasyarat

Sebelum memulai, pastikan Anda:

  • Buat dua Gudang Fabric di ruang kerja yang sama.
  • Buat atau ekstrak proyek database untuk setiap gudang di Visual Studio Code.
  • Instal Visual Studio Code di stasiun kerja Anda.
  • Instal SDK .NET untuk membangun dan menerbitkan proyek database.
  • Instal dua ekstensi Visual Studio Code: SQL Database Projects dan SQL Server (mssql).
    • Anda dapat menginstal ekstensi yang diperlukan langsung dari dalam Visual Studio Code marketplace dengan mencari "Proyek Database SQL" atau "SQL Server (mssql)".
  • Proyek gudang memvalidasi, membangun, dan dapat diterbitkan dalam Visual Studio Code.

Nota

Artikel ini berfokus pada proyek gudang di Visual Studio Code dan bagaimana Anda membuat versinya di Git sebagai proyek kode reguler. Integrasi Fabric Git untuk workspace dan item gudang dibahas secara terpisah dalam Development and Deployment dan integrasi Git. Artikel ini mengasumsikan bahwa ruang kerja Fabric Anda adalah target penyebaran dan skema T-SQL berada di satu atau lebih proyek Visual Studio Code yang Anda kendalikan versi di Git.

Artikel ini tidak membahas pengembangan lintas gudang untuk titik akhir analitik SQL dari Lakehouse. Tabel Lakehouse dan objek titik akhir analitik SQL bukan objek yang dilacak di dalam pengendalian sumber dengan cara yang sama seperti proyek gudang data. Gunakan item Gudang dengan proyek database untuk integrasi git lengkap dan dukungan penyebaran dalam pengalaman asli Fabric dan alat klien.

Skenario: Gudang lintas domain Zava Analytics

Zava Analytics menggunakan dua domain bisnis:

  • Penjualan – pesanan pelanggan, pendapatan, dan metrik alur.
  • Pemasaran – kampanye, saluran, dan metrik keterlibatan.

Setiap domain memiliki:

  • Gudang Fabric di ruang kerja yang sama:

    • ZavaSalesWarehouse
    • ZavaMarketingWarehouse
  • Proyek database di Visual Studio Code:

    • Zava.Sales.Warehouse
    • Zava.Marketing.Warehouse

Untuk membangun proses ELT dan pelaporan menyeluruh, setiap domain memerlukan tampilan read-only untuk mengakses data dari domain lain:

  • Sales membutuhkan keterlibatan pemasaran oleh pelanggan.
  • Marketing membutuhkan performa penjualan per kampanye.

Anda perlu:

  • Menetapkan dependensi lintas gudang satu arah melalui referensi database.
  • Hindari dependensi siklik.

Pastikan dependensi antar gudang adalah satu arah

Untuk setiap pasangan gudang, pilih arah untuk dependensi logis:

Contoh:

  • Sales tergantung pada Marketing data keterlibatan.
  • Marketing tidak bergantung pada Sales objek apa pun yang diperlukan pada waktu penyebaran.

Dalam praktiknya:

Zava.Sales.Warehouse memiliki referensi database ke Zava.Marketing.Warehouse.

  • T-SQL di Sales gudang dapat menggunakan nama tiga bagian seperti:
    SELECT * FROM ZavaMarketingWarehouse.Marketing.CampaignEngagement
    
  • Zava.Marketing.Warehouse tidak merujuk pada Sales objek yang akan memaksa siklus dependensi saat implementasi.

Tip

Untuk setiap sepasang gudang, gambar diagram panah sederhana (SalesMarketing). Jika Anda menemukan panah yang mengarah ke kedua arah untuk jenis objek yang sama, refaktor desain untuk mengembalikan ketergantungan satu arah.

Hindari dependensi siklik

Dependensi siklik terjadi ketika Warehouse A dan Warehouse B bergantung satu sama lain dengan cara yang tidak dapat diselesaikan oleh sistem dalam penyebaran tunggal.

Contoh masalah (jangan lakukan ini):

  • ZavaSalesWarehouse.dbo.CustomerRollup tampilan:
    CREATE VIEW dbo.CustomerRollup AS
    SELECT  c.CustomerId,
            c.TotalRevenue,
            m.LastCampaignId
    FROM    dbo.CustomerRevenue AS c
    LEFT OUTER JOIN   
            ZavaMarketingWarehouse.dbo.CustomerEngagement AS m
            ON c.CustomerId = m.CustomerId;
    
  • ZavaMarketingWarehouse.dbo.CampaignAttribution tampilan:
    CREATE VIEW dbo.CampaignAttribution AS
    SELECT  m.CampaignId,
            SUM(s.TotalRevenue) AS RevenueAttributed
    FROM    dbo.Campaigns AS m
    LEFT OUTER JOIN    
            ZavaSalesWarehouse.dbo.CustomerRollup AS s
            ON m.CampaignId = s.LastCampaignId
    GROUP BY m.CampaignId;
    

Dalam pola anti ini:

  • CustomerRollup penjualan tergantung pada CustomerEngagementpemasaran.
  • CampaignAttribution dalam Pemasaran tergantung pada CustomerRolluppenjualan.

Anti-pola ini membuat sebuah siklus: Tampilan Penjualan → Tampilan Pemasaran → Tampilan Penjualan lagi.

Panduan:

Jangan memodelkan dependensi timbal balik antara gudang sebagai objek tingkat skema biasa. Jika Anda benar-benar membutuhkan logika seperti ini, pindahkan satu sisi dependensi ke model semantik atau laporan hilir yang menghubungkan kedua gudang saat kueri.

Referensi lintas gudang langsung melalui referensi basis data

Dalam pola ini, Anda memodelkan dependensi satu arah langsung dalam proyek database menggunakan Referensi Database.

Langkah 1: Mulai dari dua proyek gudang yang ada

Anda harus sudah memiliki:

  • Zava.Sales.Warehouse → disebarkan ke ZavaSalesWarehouse
  • Zava.Marketing.Warehouse → disebarkan ke ZavaMarketingWarehouse

Setiap proyek dibuat atau diekstrak menggunakan langkah-langkah dalam Mengembangkan proyek gudang di Visual Studio Code.

Langkah 2: Menambahkan referensi database dari Penjualan ke Pemasaran

  • Di Visual Studio Code, buka tampilan Database Projects.
  • Klik kanan pada proyek Zava.Sales.Warehouse.
  • Pilih Tambahkan Referensi Database....
  • Pilih salah satu dari:
    • proyek Database di ruang kerja saat ini (Proyek database yang dirujuk dengan cara ini juga harus terbuka di Visual Studio Code), atau
    • Aplikasi tingkat data (.dacpac) (Asumsikan telah Anda buat jika Anda memiliki bawaan .dacpacMarketing untuk gudang).
  • Atur opsi referensi:
    • Jenis referensi: Server yang sama, database yang berbeda.
    • Nama atau variabel database: Gunakan variabel SQLCMD, misalnya [$(MarketingWarehouseName)].
  • Simpan dan kompilasi ulang proyek Penjualan.

Di dalam file .sqlproj, Anda seharusnya melihat entri yang mirip dengan:

<ItemGroup>
  <ArtifactReference Include="..\Zava.Marketing.Warehouse\bin\Debug\Zava.Marketing.Warehouse.dacpac">
    <DatabaseVariableLiteralValue>$(MarketingWarehouseName)</DatabaseVariableLiteralValue>
  </ArtifactReference>
</ItemGroup>
<ItemGroup>
  <SqlCmdVariable Include="MarketingWarehouseName">
    <DefaultValue>ZavaMarketingWarehouse</DefaultValue>
  </SqlCmdVariable>
</ItemGroup>

Tip

Menggunakan variabel SQLCMD untuk nama gudang jarak jauh memungkinkan Anda menggunakan kembali proyek yang sama di semua lingkungan Anda, seperti Dev/Test/Prod, di mana nama gudang mungkin berbeda.

Langkah 3: Membuat tampilan lintas gudang di Penjualan

Dalam proyek Sales, tambahkan tampilan yang membaca dari gudang Marketing.

-- schema/Views/dbo.CustomerEngagementFact.sql
CREATE VIEW [dbo].[CustomerEngagementFact] AS
SELECT
    s.CustomerId,
    s.TotalRevenue,
    m.LatestChannel,
    m.LastEngagementDate
FROM dbo.CustomerRevenue AS s
JOIN [$(MarketingWarehouseName)].[dbo].[CustomerEngagement] AS m
    ON s.CustomerId = m.CustomerId;

Poin utama:

  • Nama [$(MarketingWarehouseName)].[dbo].[CustomerEngagement] tiga bagian cocok dengan pola T-SQL yang digunakan untuk kueri lintas gudang di editor Fabric SQL.
  • DacFx menentukan database eksternal melalui referensi database.

Bangun proyek untuk memastikan tidak ada SQL71501 kesalahan referensi yang tidak terselesaikan .

Langkah 4: Publikasikan gudang Pemasaran, lalu Penjualan

Untuk menghindari masalah penyebaran:

  • Membangun dan menerbitkanZava.Marketing.Warehouse pertama:
    • Klik kanan proyek → Build.
    • Klik kanan proyek → Terbitkan → pilih ZavaMarketingWarehouse.
  • Setelah Marketing penyebaran berhasil, bangun dan terbitkanZava.Sales.Warehouse:
    • Klik kanan proyek → Build.
    • Klik kanan proyek → Terbitkan → pilih ZavaSalesWarehouse.

Alur penyebaran yang dihasilkan adalah:

Zava.Marketing.Warehouse (tidak ada dependensi eksternal) → Zava.Sales.Warehouse (tergantung pada Marketing)

Sekarang, kueri T-SQL apa pun di ZavaSalesWarehouse dapat menggunakan tampilan dbo.CustomerEngagementFact, yang secara internal membaca dari gudang Marketing menggunakan T-SQL lintas gudang.

Lanjutkan pembelajaran

  • Gabungkan pola ini dengan kontrol sumber dan panduan CI/CD dalam dokumentasi Pengembangan dan deployment serta integrasi git Fabric.
  • Perluas skenario Zava Analytics untuk menyertakan lingkungan Dev/Test/Prod , menggunakan alur penyebaran atau CI/CD eksternal untuk mengatur urutan penerbitan di beberapa gudang.