Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini memberikan panduan untuk meningkatkan kinerja kueri Federasi Lakehouse.
Menggabungkan beberapa predikat menggunakan AND operator
Databricks Runtime mencoba menurunkan predikat ke mesin database jarak jauh untuk mengurangi jumlah rekaman yang diambil melalui jaringan. Jika predikat tidak dapat didorong ke bawah, kueri yang dijalankan pada mesin database jarak jauh mengecualikan predikat, jadi pemfilteran harus dilakukan menggunakan Databricks Runtime. Namun, jika bagian tertentu dari filter tidak dapat didorong ke bawah, bagian lain dari filter masih dapat didorong ke bawah jika digabungkan oleh AND operator.
Filter dengan predikat yang tidak dapat didorong
Jalankan kueri berikut ini di buku catatan atau editor kueri Databricks SQL untuk memfilter rekaman menurut nama menggunakan ILIKE ekspresi:
SELECT * FROM foreign_catalog.schema.table WHERE name ILIKE 'john'
Ekspresi ILIKE tidak dapat didorong ke database jarak jauh (misalnya, MySQL) karena tidak ada terjemahan yang sesuai. Pemfilteran harus dilakukan menggunakan Databricks Runtime.
Kueri yang dikirim ke database jarak jauh mengembalikan semua rekaman:
SELECT * FROM catalog.schema.table
Filter dengan predikat yang dapat dipindahkan dan tidak dapat dipindahkan
Jalankan kueri berikut ini di buku catatan atau editor kueri Databricks SQL untuk memfilter rekaman menurut nama dan tanggal:
SELECT * FROM foreign_catalog.schema.table WHERE name ILIKE 'john' AND date > '2025-05-01'
Ekspresi ILIKE tidak dapat didorong ke database jarak jauh (misalnya, MySQL) karena tidak ada terjemahan yang sesuai, tetapi perbandingan tanggal dapat didorong ke bawah. Pemfilteran nama masih harus dilakukan menggunakan Databricks Runtime, tetapi perbandingan tanggal mengurangi jumlah rekaman yang diambil.
Kueri yang dikirim ke database jarak jauh mengembalikan subset rekaman:
SELECT * FROM catalog.schema.table WHERE date > '2025-05-01'
Periksa kueri mana yang akan berjalan pada database jarak jauh
Untuk melihat kueri mana yang akan dikirim ke database jarak jauh, jalankanEXPLAIN perintah FORMATTED.
Penting
Kueri aktual mungkin berbeda dari kueri dalam EXPLAIN FORMATTED output karena eksekusi kueri adaptif.
Mengatur ukuran batch yang diambil dari database jarak jauh
Anda dapat mengonfigurasi konektor berikut yang menggunakan protokol transfer JDBC untuk mengontrol cara mereka mengambil data dari sistem jarak jauh.
- Databricks
- Microsoft SQL Server
- Microsoft Azure Synapse
- MySQL
- Oracle
- PostgreSQL
- Data Salesforce 360
- Teradata
Ukuran pengambilan JDBC menentukan jumlah baris yang akan diambil per perjalanan pulang pergi. Secara default, sebagian besar konektor JDBC mengambil data secara atomik. Ini dapat menyebabkan jumlah data melebihi memori yang tersedia.
Untuk menghindari kesalahan di luar memori, atur fetchSize parameter . Ketika fetchSize diatur ke nilai selain nol, konektor membaca data secara bertahap. Jumlah maksimum baris per batch sama dengan nilai fetchSize. Databricks merekomendasikan untuk menentukan nilai besar fetchSize (misalnya, 100,000) karena waktu eksekusi kueri keseluruhan dapat diperpanjang jika jumlah baris dalam batch terlalu kecil.
Parameter ini memungkinkan simpul pekerja untuk membaca data secara batch, tetapi tidak secara paralel.
Persyaratan komputasi:
- Anda harus menggunakan komputasi pada Databricks Runtime 16.1 atau lebih tinggi. Gudang SQL harus Pro atau Tanpa Server dan harus menggunakan 2024.50.
SELECT * FROM mySqlCatalog.schema.table WITH ('fetchSize' 100000)
Tetapkan parameter ukuran partisi (Snowflake)
Snowflake memungkinkan pengambilan data dalam beberapa partisi, yang memungkinkan keterlibatan beberapa pelaksana dan pemrosesan paralel.
Pilih ukuran partisi yang sesuai dengan mengatur partition_size_in_mb parameter .
Parameter ini menentukan ukuran yang tidak dikompresi yang direkomendasikan untuk setiap partisi. Untuk mengurangi jumlah partisi, tentukan nilai yang lebih besar.
Nilai defaultnya adalah 100 (MB).
Parameter partition_size_in_mb menetapkan ukuran yang direkomendasikan; ukuran partisi yang sebenarnya mungkin bervariasi.
Persyaratan komputasi:
- Anda harus menggunakan komputasi pada Databricks Runtime 16.1 atau lebih tinggi. Gudang SQL harus Pro atau Tanpa Server dan harus menggunakan 2024.50.
SELECT * FROM snowflakeCatalog.schema.table WITH ('partition_size_in_mb' 1000)
Mengaktifkan pembacaan paralel untuk konektor JDBC
Konektor yang mendukung protokol transfer JDBC dapat membaca data secara paralel dengan mempartisi kueri. Anda dapat mengonfigurasi pembacaan paralel untuk konektor berikut:
- Databricks
- Microsoft SQL Server
- Microsoft Azure Synapse
- MySQL
- Oracle
- PostgreSQL
- Pergeseran Merah
- Data Salesforce 360
- Teradata
Ini memungkinkan beberapa eksekutor untuk mengambil data secara bersamaan, secara signifikan meningkatkan performa untuk tabel besar.
Untuk mengaktifkan pembacaan paralel, tentukan parameter ini:
-
numPartitions: Jumlah partisi yang akan digunakan untuk paralelisme -
partitionColumn: Nama kolom numerik yang digunakan untuk mempartisi kueri -
lowerBound: Nilai minimum daripartitionColumnyang digunakan untuk menentukan langkah partisi -
upperBound: Nilai maksimum yangpartitionColumndigunakan untuk memutuskan langkah partisi
Penting
Nilai lowerBound dan upperBound hanya digunakan untuk memutuskan langkah partisi, bukan untuk memfilter baris dalam tabel. Semua baris dalam tabel dipartisi dan dikembalikan.
Kolom partisi harus:
- Kolom numerik
- Didistribusikan secara merata di seluruh rentang
- Kolom terindeks untuk performa yang lebih baik
Persyaratan komputasi:
- Anda harus menggunakan komputasi pada Databricks Runtime 17.1 atau lebih tinggi. Gudang SQL harus Pro atau Tanpa Server dan harus menggunakan 2025.25.
Dalam contoh berikut, kueri dibagi menjadi 4 partisi paralel berdasarkan id kolom, dengan setiap partisi memproses rentang sekitar 250 ID (dengan asumsi bahwa ada satu rekaman untuk masing-masing id antara 1 dan 1000).
SELECT * FROM mySqlCatalog.schema.table WITH (
'numPartitions' 4,
'partitionColumn' 'id',
'lowerBound' 1,
'upperBound' 1000
)
Menggunakan tampilan database sumber dengan pembacaan paralel
Nota
Pembacaan paralel tidak didukung saat mengkueri tampilan yang dibuat Databricks yang mereferensikan tabel federasi. Buat tampilan di database sumber sebagai gantinya.
Untuk menggunakan pembacaan paralel dengan menggunakan tampilan, buat tampilan tersebut di database sumber daripada di Databricks.
Dalam database sumber:
CREATE VIEW my_source_database_view AS SELECT * FROM source_database_schema.table;
Kemudian dari Databricks, kueri tampilan menggunakan parameter baca paralel:
SELECT * FROM myfederated_catalog.schema.my_source_database_view WITH (
'numPartitions' 4,
'partitionColumn' 'id',
'lowerBound' 1,
'upperBound' 1000
)
Bergabung dengan pushdown di Federasi Lakehouse
Penting
Fitur ini ada di Pratinjau Umum.
Pelajari cara kerja penggabungan pushdown di Databricks Lakehouse Federation.
Gambaran umum tentang optimalisasi join pushdown
Pemindahan operasi join adalah teknik pengoptimalan kueri di mana Databricks mendorong operasi join ke mesin database jarak jauh daripada mengambil data dan melakukan join secara lokal. Ini secara signifikan mengurangi lalu lintas jaringan dan meningkatkan performa kueri dengan memanfaatkan kemampuan gabungan bawaan database jarak jauh.
Sumber data yang didukung
Sumber data berikut mendukung pushdown gabungan:
- Oracle
- PostgreSQL
- MySQL
- SQL Server
- Teradata
- Pergeseran Merah
- Snowflake
- BigQuery
Fitur ini Tersedia Secara Umum dan diaktifkan secara default untuk Redshift, Snowflake, dan BigQuery. Batasan dan persyaratan berikut hanya berlaku untuk konektor Oracle, PostgreSQL, MySQL, SQL Server, dan Teradata.
Persyaratan
- Anda harus menggunakan komputasi pada Databricks Runtime 17.2 atau lebih tinggi.
- Gudang SQL harus Pro atau Tanpa Server dan harus menggunakan 2025.30.
- Pada halaman Pratinjau di UI Databricks, Anda harus mengaktifkan Join Pushdown untuk Kueri Federasi (Pratinjau Umum).
Keterbatasan
- Hanya gabungan dalam, luar kiri, dan luar kanan yang didukung.
- Alias dalam elemen join hanya didukung di Databricks Runtime 17.3 ke atas.
Persyaratan hierarki simpul
Agar gabungan didorong ke bawah, semua simpul di cabang anak kiri dan kanan juga harus dapat didorong. Aturan berikut ini akan berlaku:
- Simpul anak yang didukung: Hanya gabungan, filter, sampel, dan node pemindaian yang dapat muncul di bawah gabungan dalam rencana kueri agar pushdown berhasil.
- Simpul turunan yang tidak didukung: Jika operasi batasan, offset, atau agregat muncul di cabang kiri atau kanan di bawah penggabungan, penggabungan tidak dapat didorong ke bawah.
- Operasi di atas gabungan: Operasi agregat, batas, dan offset dapat didorong ke bawah saat diterapkan di atas gabungan.
Mengidentifikasi pola gabungan yang didukung dan tidak didukung
-- Supported: Join two table scans
SELECT *
FROM table1
INNER JOIN table2
ON col_from_table1 = col_from_table2 + 1
-- Supported: Join two table scans with a nested select query
SELECT *
FROM (SELECT a FROM table1) q1
INNER JOIN (SELECT a FROM table2) q2
ON q1.a = q2.a + 1
-- Supported: Child subqueries with aliases in projection (:re[DBR] 17.3+)
SELECT *
FROM (SELECT a AS a1 FROM table1) t1
INNER JOIN (SELECT a AS a2 FROM table2) t2
ON t1.a1 = t2.a2 + 1
-- Supported: Join with filters below
SELECT *
FROM (SELECT * FROM table1 WHERE a > 10) t1
INNER JOIN (SELECT * FROM table2 WHERE b < 20) t2
ON t1.id = t2.id
-- Supported: Aggregate on top of join
SELECT COUNT(*)
FROM table1 t1
INNER JOIN table2 t2
ON t1.id = t2.id
-- Not supported: Join on top of aggregate
SELECT *
FROM (SELECT id, COUNT(*) as cnt FROM table1 GROUP BY id) t1
INNER JOIN table2 t2
ON t1.id = t2.id
-- Not supported: Join on top of limit
SELECT *
FROM (SELECT * FROM table1 LIMIT 100) t1
INNER JOIN table2 t2
ON t1.id = t2.id
Observability
Gunakan EXPLAIN FORMATTED untuk memverifikasi bahwa gabungan Anda sedang didorong ke bawah:
EXPLAIN FORMATTED
SELECT *
FROM foreign_catalog.schema.table1 t1
INNER JOIN foreign_catalog.schema.table2 t2
ON t1.id = t2.id
Contoh output yang menunjukkan pushdown gabungan yang berhasil:
== Physical Plan ==
*(1) Scan JDBCRelation
PushedFilters: [id = id_1],
PushedJoins:
[L]: Relation: foreign_catalog.schema.table1
PushedFilters: [ID IS NOT NULL]
[R]: Relation: foreign_catalog.schema.table2
PushedFilters: [ID IS NOT NULL]
Dalam output ini:
-
id_1adalah alias yang dihasilkan Databricks secara otomatis untuk mengatasi ambiguitas ketika kolom memiliki nama duplikat. - Yang
PushedFiltersdi atasPushedJoinsmewakili kondisi gabungan aktual yang ditransfer ke database jarak jauh. -
PushedFiltersdalam setiap relasi ([L] dan [R]) menunjukkan predikat filter tambahan yang diterapkan ke setiap tabel.