Mengoptimalkan tabel Lakehouse berdasarkan pemeriksaan kesehatan

Berlaku untuk:✅ Titik akhir analitik SQL di Microsoft Fabric

Dalam tutorial ini, Anda mempelajari cara membangun alur Microsoft Fabric untuk melakukan pemeliharaan tabel cerdas.

Solusi ini memanggil sys.sp_get_table_health_metrics prosedur tersimpan T-SQL pada endpoint analitik SQL Lakehouse, mengevaluasi hasilnya, dan hanya menjalankan OPTIMIZE jika tabel benar-benar memerlukan pemeliharaan. Pola "periksa-lalu-tindak" ini mencegah biaya komputasi yang tidak perlu pada tabel yang sehat, sekaligus memastikan tabel yang mengalami degradasi dipelihara secara otomatis.

Mengapa pemeliharaan diperlukan

Tabel Lakehouse dapat menumpuk terlalu banyak file Parquet berukuran kecil dari waktu ke waktu, yang menurunkan kinerja kueri pada endpoint analitik SQL.

Daripada berjalan OPTIMIZE pada jadwal tetap terlepas dari status tabel, alur ini membuat keputusan berdasarkan informasi: alur ini memeriksa kesehatan tabel terlebih dahulu, dan hanya memicu pengoptimalan ketika anomali terdeteksi.

Prasyarat

Sebelum mulai, pastikan bahwa Anda memiliki:

  • Ruang kerja Microsoft Fabric dengan izin kontributor atau yang lebih tinggi.
  • Lakehouse di ruang kerja yang berisi setidaknya satu tabel Delta yang ingin Anda pantau. Tutorial ini menggunakan Lakehouse bernama SalesDataLakehouse.
  • Pemahaman tentang alur data Fabric.
  • Keakraban dengan buku catatan Fabric.

Struktur solusi

Alur yang telah selesai memiliki struktur ini:

  1. Aktivitas skrip: Dijalankan sp_get_table_health_metrics terhadap tabel target dan mengembalikan metrik kesehatan tabel sebagai output terstruktur.
  2. Aktivitas If Condition: Membaca PotentialAnomalyType langsung dari keluaran Skrip dan memeriksa apakah nilainya lebih besar dari nol. Untuk informasi selengkapnya tentang PotentialAnomalyType, lihat Kode jenis anomali potensial.
  3. Aktivitas notebook (di dalam cabang True): Menjalankan OPTIMIZE pada tabel dari notebook Spark.

Di akhir tutorial ini, Anda akan memiliki notebook yang mengambil parameter dari alur dan mengoptimalkan tabel saat dipicu.

Langkah 1: Membuat buku catatan pengoptimalan

Notebook menerima target Lakehouse, skema, dan nama tabel sebagai parameter dari alur, lalu menjalankan OPTIMIZE menggunakan Spark SQL.

  1. Di ruang kerja Fabric Anda, pilih + Item baru>Notebook.
  2. Beri nama buku catatan Optimize-Table.
  3. Di bawah Lokasi, pilih Lakehouse tempat tabel yang Anda periksa disimpan. Latihan ini menggunakan Lakehouse bernama SalesDataLakehouse.
  4. Pilih Buat.

Tambahkan sel parameter

Sel pertama menentukan variabel yang diambil alih alur saat runtime.

  1. Di sel pertama, masukkan parameter berikut. Nilai tidak penting, dan alur mengambil alihnya saat runtime.

    # Parameters 
    lakehouse_name = "<LakehouseName>"
    schema_name    = "<SchemaName>"
    table_name     = "<TableName>"
    

    Penting

    Bagaimana parameterisasi bekerja di notebook Fabric: Saat dijalankan, Fabric menyisipkan sel baru segera setelah sel parameter, yang menetapkan ulang variabel-variabel ini dengan nilai yang diteruskan oleh pipeline. Nilai yang Anda tetapkan di sini hanya menginisialisasi variabel dan meningkatkan keterbacaan.

  2. Pilih menu sel (...) >Alihkan sel parameter untuk menandai sel ini sebagai sel parameter.

Tambahkan sel OPTIMIZE

Perintah OPTIMIZE adalah perintah Spark SQL, bukan perintah T-SQL. Anda harus menjalankannya di lingkungan Spark seperti notebook, definisi kerja Spark, atau antarmuka Pemeliharaan Lakehouse. Titik akhir analitik SQL dan editor kueri Warehouse SQL tidak mendukung perintah ini secara langsung.

  1. Di sel kedua, masukkan:

    full_name = f"{lakehouse_name}.{schema_name}.{table_name}"
    print(f"Optimizing {full_name} ...")
    
    result = spark.sql(f"OPTIMIZE {full_name}")
    result.show(truncate=False)
    
  2. Tambahkan sel Markdown sesuai kebutuhan untuk mendokumen buku catatan dengan benar untuk pengguna lain. Buku catatan akhir Anda akan terlihat seperti berikut ini:

    Cuplikan layar notebook Fabric berjudul 'Optimalkan tabel Lakehouse jika pemeriksaan kesehatan menunjukkan bahwa hal itu diperlukan,' dengan dua sel PySpark: satu menetapkan parameter lakehouse, skema, dan tabel yang disediakan oleh alur, dan yang lainnya menjalankan perintah OPTIMIZE pada tabel Lakehouse yang dipilih.

Note

Contoh ini mengasumsikan Lakehouse dengan skema yang diaktifkan. Sesuaikan nama tiga bagian pada full_name jika Anda tidak menggunakan skema Lakehouse.

Langkah 2: Membuat alur

  1. Di ruang kerja Fabric Anda, pilih + Item baru>Pipeline.

  2. Beri nama alur Check-and-Optimize-Table.

  3. Pilih latar belakang kanvas alur, lalu buka tab Parameter . Tambahkan tiga parameter:

    Name Type Nilai standar
    lakehouse_name String SalesDataLakehouse
    schema_name String dbo
    table_name String FactSales

Langkah 3: Tambahkan aktivitas Skrip

Aktivitas Skrip menjalankan sys.sp_get_table_health_metrics di endpoint analitik SQL dan menangkap hasilnya.

Penting

Gunakan aktivitas Skrip , bukan aktivitas Prosedur tersimpan . Hanya aktivitas Skrip yang mengekspos hasil yang ditetapkan sebagai output JSON terstruktur yang dapat diurai aktivitas hilir.

  1. Dari tab Aktivitas , pilih Skrip untuk menambahkannya ke kanvas.
  2. Beri nama Periksa Kesehatan Tabel.
  3. Di tab Pengaturan :
    • Koneksi: Pilih titik akhir analitik SQL untuk Lakehouse Anda. Jika tidak tercantum, pilih Telusuri semua di bagian bawah daftar dropdown, lalu temukan titik akhir analitik SQL Lakehouse Anda.

    • Jenis skrip: Pilih Kueri.

    • Skrip: Pilih Tambahkan konten dinamis dan masukkan ekspresi berikut:

      @concat('EXEC sys.sp_get_table_health_metrics ''',
              pipeline().parameters.schema_name, '.',
              pipeline().parameters.table_name, '''')
      

Ekspresi ini menghasilkan perintah SQL yang menjalankan prosedur tersimpan terhadap tabel target Anda, misalnya: EXEC sys.sp_get_table_health_metrics 'dbo.FactSales'.

Memverifikasi output skrip

Jalankan pipeline sekali dan periksa keluaran aktivitas Skrip. Anda melihat objek JSON yang mirip dengan:

{
  "resultSetCount": 1,
  "resultSets": [
    {
      "rowCount": 1,
      "rows": [
        {
          "PotentialAnomalyType": 3,
          "PotentialAnomalyDescription": "Too many small files...",
          "FileCount": 2688,
          "...": "..."
        }
      ]
    }
  ]
}

Penting

Hasil aktual Anda mungkin bervariasi berdasarkan status tabel Anda. Kuncinya adalah mengembalikan kolom yang diekspos oleh sys.sp_get_table_health_metrics.

Langkah 4: Tambahkan aktivitas If Condition

Aktivitas If Condition membaca PotentialAnomalyType langsung dari output aktivitas Skrip dan mengambil keputusan berdasarkan hasilnya. Gunakan langkah-langkah berikut:

  1. Dari tab Aktivitas , pilih Kondisi Jika untuk menambahkan aktivitas ke kanvas.

  2. Beri nama Periksa Anomali.

  3. Gambar panah Sukses (hijau) dari Periksa Kesehatan Tabel ke Periksa Anomali.

  4. Di tab Aktivitas dari aktivitas Kondisi Jika , atur Ekspresi ke:

    @greater(int(activity('Check Table Health').output.resultSets[0].rows[0]['PotentialAnomalyType']), 0)
    

Ekspresi ini membaca baris pertama yang dikembalikan oleh sys.sp_get_table_health_metrics, mengonversi PotentialAnomalyType menjadi bilangan bulat, dan bernilai true saat nilainya lebih besar dari nol, yang menunjukkan adanya anomali yang terdeteksi pada tabel target.

Langkah 5: Tambahkan aktivitas Notebook (cabang True)

Saat aktivitas If Condition dipilih, pilih Ubah (ikon pensil) di samping Benar. Kanvas beralih ke sub-kanvas yang dibatasi pada cabang True.

  1. Seret aktivitas Notebook ke sub-kanvas True.

  2. Beri nama Run OPTIMIZE.

  3. Di tab Pengaturan:

    • Buku Catatan: Pilih buku catatan Optimize-Table yang Anda buat di Langkah 1.

    • Perluas parameter Dasar, lalu tambahkan tiga baris:

      Name Type Nilai
      lakehouse_name String @pipeline().parameters.lakehouse_name
      schema_name String @pipeline().parameters.schema_name
      table_name String @pipeline().parameters.table_name

Tiga nilai kolom nama harus sama persis dengan nama variabel di sel parameter buku catatan.

Note

Anda dapat membiarkan Aktivitas False kosong. Aktivitas If Condition menganggap cabang False yang kosong sebagai no-op dan melaporkan pipeline sebagai berhasil.

Pipeline Anda yang telah selesai seharusnya terlihat seperti berikut:

Cuplikan layar pipeline data Fabric dengan aktivitas skrip Check Table Health yang terhubung ke aktivitas kondisional Check Anomaly. Cabang true menjalankan aktivitas notebook OPTIMIZE, sedangkan cabang false tidak memiliki aktivitas.

Langkah 6: Memvalidasi dan menjalankan

  1. Pilih Validasi pada toolbar alur untuk memeriksa kesalahan konfigurasi.

  2. Pilih Jalankan untuk menjalankan alur secara manual.

  3. Pantau proses berjalan dan konfirmasikan:

    1. Periksa kesehatan tabel: periksa output dari aktivitas ini saat aktivitas ini dijalankan. Anda akan melihat hasil prosedur tersimpan sys.sp_get_table_health_metrics dalam format JSON.
    2. Periksa Anomali: mengevaluasi dengan benar dengan membaca PotentialAnomalyType langsung dari output Skrip.
    3. Jalankan OPTIMIZE (hanya jika PotentialAnomalyType > 0): jika aktivitas Periksa Anomali mengevaluasi True, tinjau input aktivitas Jalankan OPTIMIZE untuk memverifikasi bahwa aktivitas menggunakan parameter yang benar (nama Lakehouse, skema, dan nama tabel) dan periksa output untuk meninjau pesan dari OPTIMIZE operasi.

Membersihkan sumber daya

Jika Anda membuat sumber daya hanya untuk tutorial ini dan tidak lagi membutuhkannya, hapus item berikut dari ruang kerja Anda:

  • Alur Check-and-Optimize-Table .
  • Buku catatan Optimize-Table .