Mengapa UDF Membawa kepada Produk Cartesian dalam Pertanyaan SQL
Apabila menggunakan SQL, fungsi takrif pengguna (UDF) boleh memperkenalkan isu prestasi yang tidak dijangka. Ini amat ketara dalam operasi gabungan, di mana UDF boleh membawa kepada produk Cartesian dan bukannya gabungan luar penuh yang dikehendaki.
Punca Produk Cartesian
Penggunaan UDF memerlukan penilaian fungsi sewenang-wenang dengan domain berpotensi tak terhingga dan tingkah laku bukan penentu. Untuk menentukan nilai fungsi ini, sistem mesti mempertimbangkan semua kemungkinan gabungan argumen, menghasilkan produk Cartesian.
Contoh
Pertimbangkan pertanyaan SQL yang disediakan dalam yang diberikan Databricks-Soalan:
-- Query 1: Join without UDF SELECT col1, col2 FROM table1 AS t1 JOIN table2 AS t2 ON t1.foo = t2.bar; -- Query 2: Join with UDF SELECT col1, col2 FROM table1 AS t1 JOIN table2 AS t2 ON equals(t1.foo, t2.bar);
Dalam Pertanyaan 1, syarat kesaksamaan mudah membolehkan data dikocok berdasarkan lajur foo dan bar, menghasilkan hasil yang diharapkan. Walau bagaimanapun, dalam Pertanyaan 2, penggunaan UDF yang sama memerlukan penilaian fungsi untuk semua gabungan pasangan yang mungkin, menghasilkan produk Cartesian.
Penyelesaian
Memaksa bahagian luar menyertai produk Cartesian secara amnya tidak boleh dilakukan tanpa mengubah suai enjin Spark SQL. Walau bagaimanapun, mengoptimumkan UDF itu sendiri untuk mengurangkan bilangan penilaian boleh mengurangkan beberapa kemerosotan prestasi.
Atas ialah kandungan terperinci Mengapakah UDF dalam SQL Joins Kadang-kadang Menghasilkan Produk Cartesian Daripada Gabungan Jangkaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!