Pengoptimalan gabungan condong menggunakan petunjuk condong
Penting
Dokumentasi ini telah dihentikan dan mungkin tidak diperbarui. Produk, layanan, atau teknologi yang disebutkan dalam konten ini tidak lagi didukung.
Petunjuk gabungan condong tidak diperlukan. Databricks menangani penyimpangan secara default dengan menggunakan eksekusi kueri adaptif (AQE). Lihat Eksekusi kueri adaptif.
Catatan
spark.sql.adaptive.skewJoin.enabled
harus True
, yang merupakan pengaturan default pada Azure Databricks.
Apa itu kemiringan data?
Data skew adalah suatu kondisi saat data tabel didistribusikan secara tidak merata di antara partisi dalam kluster. Data skew dapat sangat menurunkan performa kueri, terutama dengan gabung. Gabung antara tabel besar membutuhkan pengacakan data dan skew dapat menyebabkan ketidakseimbangan pekerjaan yang ekstrem dalam kluster. Kemungkinan data skew memengaruhi kueri jika kueri tampaknya macet menyelesaikan sangat sedikit tugas (misalnya, 3 tugas terakhir dari 200). Untuk memverifikasi bahwa data skew memengaruhi kueri:
- Klik tahap yang macet dan verifikasi bahwa itu adalah gabung.
- Setelah kueri selesai, temukan tahap yang melakukan gabung dan periksa distribusi durasi tugas.
- Urutkan tugas dengan mengurangi durasi dan periksa beberapa tugas pertama. Jika satu tugas membutuhkan waktu lebih lama untuk diselesaikan daripada tugas lainnya, ada skew.
Untuk memperbaiki kemiringan, Delta Lake di Azure Databricks SQL menerima petunjuk skew dalam kueri. Dengan informasi dari petunjuk skew, Databricks Runtime dapat membuat rencana kueri yang lebih baik, yang tidak mengalami data skew.
Mengonfigurasi petunjuk skew dengan nama relasi
Petunjuk skew harus berisi setidaknya nama hubungan dengan condong. Relasi adalah tabel, tampilan, atau kueri bertumpuk. Semua gabung dengan relasi ini kemudian gunakan optimalisasi skew join.
-- table with skew
SELECT /*+ SKEW('orders') */
*
FROM orders, customers
WHERE c_custId = o_custId
-- subquery with skew
SELECT /*+ SKEW('C1') */
*
FROM (SELECT * FROM customers WHERE c_custId < 100) C1, orders
WHERE C1.c_custId = o_custId
Mengonfigurasi petunjuk skew dengan nama relasi dan nama kolom
Mungkin ada beberapa gabung pada suatu hubungan dan hanya beberapa darinya yang akan mengalami skew. Optimalisasi skew join memiliki beberapa overhead sehingga lebih baik menggunakannya hanya bila diperlukan. Untuk tujuan ini, petunjuk skew menerima nama kolom. Hanya gabung dengan kolom ini menggunakan optimalisasi skew join.
-- single column
SELECT /*+ SKEW('orders', 'o_custId') */
*
FROM orders, customers
WHERE o_custId = c_custId
-- multiple columns
SELECT /*+ SKEW('orders', ('o_custId', 'o_storeRegionId')) */
*
FROM orders, customers
WHERE o_custId = c_custId AND o_storeRegionId = c_regionId
Mengonfigurasi petunjuk skew dengan nama relasi, nama kolom, dan nilai skew
Anda juga dapat menentukan nilai skew dalam petunjuk. Bergantung pada kueri dan data, nilai miring mungkin diketahui (misalnya, karena tidak pernah berubah) atau mungkin mudah diketahui. Melakukan hal ini mengurangi overhead optimalisasi skew join. Jika tidak, Delta Lake mendeteksinya secara otomatis.
-- single column, single skew value
SELECT /*+ SKEW('orders', 'o_custId', 0) */
*
FROM orders, customers
WHERE o_custId = c_custId
-- single column, multiple skew values
SELECT /*+ SKEW('orders', 'o_custId', (0, 1, 2)) */
*
FROM orders, customers
WHERE o_custId = c_custId
-- multiple columns, multiple skew values
SELECT /*+ SKEW('orders', ('o_custId', 'o_storeRegionId'), ((0, 1001), (1, 1002))) */
*
FROM orders, customers
WHERE o_custId = c_custId AND o_storeRegionId = c_regionId
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk