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.
Menggunakan fungsi
Penting
Fitur ini ada di Pratinjau Umum.
Fungsi remote_query bernilai tabel (TVF) memungkinkan Anda menjalankan kueri SQL langsung terhadap database eksternal dan gudang data dari dalam Azure Databricks, menggunakan sintaks SQL asli dari sistem jarak jauh. Fungsi ini menyediakan alternatif yang fleksibel untuk federasi kueri, memungkinkan Anda menjalankan kueri yang ditulis dalam dialek database jarak jauh tanpa perlu menerjemahkannya ke Databricks SQL.
remote_query dibandingkan dengan federasi kueri
Tabel berikut ini meringkas perbedaan utama antara remote_query fungsi dan federasi kueri:
| Attribute | fungsi remote_query |
Federasi kueri |
|---|---|---|
| Sintaks kueri | Tulis kueri menggunakan dialek SQL asli database jarak jauh (misalnya, Oracle PL/SQL, BigQuery SQL). | Tulis kueri menggunakan sintaks Databricks SQL. Databricks menerjemahkan dan mengalirkan operasi yang kompatibel ke basis data jarak jauh. |
| Skenario penggunaan |
|
|
| Kontrol akses | Pengguna memerlukan USE CONNECTION hak istimewa pada koneksi. Izin dapat didelegasikan melalui tampilan. |
Pengguna memerlukan hak istimewa tingkat tabel pada objek katalog asing. Kontrol terperinci. |
Sebelum Anda mulai
Persyaratan ruang kerja:
- Workspace telah diaktifkan untuk Unity Catalog.
Persyaratan komputasi:
- Konektivitas jaringan dari kluster Databricks Runtime atau gudang SQL Anda ke sistem database target. Lihat Rekomendasi jaringan untuk Lakehouse Federation.
- Kluster Azure Databricks harus menggunakan Databricks Runtime 17.3 atau lebih tinggi.
- Gudang SQL harus Pro atau Tanpa Server dan menggunakan versi 2025.35 atau lebih tinggi.
Izin diperlukan:
- Untuk membuat koneksi, Anda harus memiliki
CREATE CONNECTIONhak istimewa pada metastore Katalog Unity. - Untuk menggunakan
remote_queryfungsi, Anda harus memilikiUSE CONNECTIONhak istimewa pada koneksi atauSELECThak istimewa pada tampilan yang membungkus fungsi. Kluster pengguna tunggal juga memerlukanMANAGEizin untuk koneksi.
Buat koneksi
Untuk menggunakan fungsi remote_query ini, pertama-tama Anda perlu membuat koneksi Katalog Unity ke database eksternal Anda. Jika Anda sudah memiliki koneksi yang dibuat untuk federasi kueri, Anda bisa menggunakannya kembali.
Fungsi ini remote_query mendukung koneksi ke jenis koneksi berikut:
Untuk informasi tentang mengelola koneksi yang ada, lihat Pengelolaan Koneksi untuk Lakehouse Federation.
Memberikan akses koneksi
Untuk menggunakan fungsi remote_query, Anda harus memiliki hak istimewa USE CONNECTION di koneksi (atau hak istimewa MANAGE di kluster pengguna tunggal).
GRANT USE CONNECTION ON CONNECTION <connection-name> TO <user-or-group>;
Menggunakan fungsi remote_query
Fungsi menjalankan remote_query kueri pada database jarak jauh dan mengembalikan hasil sebagai tabel yang bisa Anda gunakan dalam kueri Databricks SQL.
Syntax
SELECT * FROM remote_query(
'<connection-name>',
<option-key> => '<option-value>'
[, <option-key> => '<option-value>' ...]
)
Parameter yang diperlukan
-
connection-name: Nama koneksi Katalog Unity yang akan digunakan.
Semua parameter lain yang diperlukan bervariasi menurut jenis koneksi. Lihat Opsi khusus konektor untuk detailnya.
Opsi khusus konektor
Opsi yang tersedia bervariasi menurut jenis koneksi. Tabel berikut ini menjelaskan opsi untuk setiap konektor.
MySQL, PostgreSQL, SQL Server, Redshift, dan Teradata
| Pengaturan | Diperlukan | Description |
|---|---|---|
database |
Yes | Nama database pada sistem jarak jauh. |
query |
Ya (atau dbtable) |
String kueri SQL untuk dieksekusi pada basis data jarak jauh. Tidak dapat digunakan dengan dbtable. |
dbtable |
Ya (atau query) |
Nama tabel yang akan dikueri. Tidak dapat digunakan dengan query. |
fetchsize |
Tidak. | Jumlah baris yang diambil per perjalanan pulang pergi. Nilai yang lebih besar dapat meningkatkan performa tetapi menggunakan lebih banyak memori. Default: 0 (gunakan Default Driver). |
partitionColumn |
Tidak. | Kolom dengan nilai yang didistribusikan secara seragam untuk digunakan untuk pengambilan data paralel. Harus digunakan dengan lowerBound, upperBound, dan numPartitions. Tidak dapat digunakan dengan query opsi . |
lowerBound |
Tidak. | Nilai minimum kolom partisi. Harus digunakan dengan partitionColumn, upperBound, dan numPartitions. |
upperBound |
Tidak. | Nilai maksimum kolom partisi. Harus digunakan dengan partitionColumn, lowerBound, dan numPartitions. |
numPartitions |
Tidak. | Jumlah koneksi paralel yang digunakan untuk mengambil data. Jangan tentukan ini terlalu tinggi (ratusan). Harus digunakan dengan partitionColumn, lowerBound, dan upperBound. |
Nota
Ketika Anda menggunakan parameter partisi, keempat parameter (partitionColumn, , lowerBound, upperBoundnumPartitions) harus ditentukan bersama-sama, dan Anda harus menggunakan dbtable opsi alih-alih query.
Oracle
| Pengaturan | Diperlukan | Description |
|---|---|---|
service_name |
Yes | Nama layanan Oracle (digunakan alih-alih database). |
query |
Ya (atau dbtable) |
String kueri SQL untuk dieksekusi pada basis data jarak jauh. Tidak dapat digunakan dengan dbtable. |
dbtable |
Ya (atau query) |
Nama tabel yang akan dikueri. Tidak dapat digunakan dengan query. |
fetchsize |
Tidak. | Jumlah baris yang diambil per perjalanan pulang pergi. Nilai yang lebih besar dapat meningkatkan performa tetapi menggunakan lebih banyak memori. Default: 0 (gunakan Default Driver). |
partitionColumn |
Tidak. | Kolom dengan nilai yang didistribusikan secara seragam untuk digunakan untuk pengambilan data paralel. Harus digunakan dengan lowerBound, upperBound, dan numPartitions. Tidak dapat digunakan dengan query opsi . |
lowerBound |
Tidak. | Nilai minimum kolom partisi. Harus digunakan dengan partitionColumn, upperBound, dan numPartitions. |
upperBound |
Tidak. | Nilai maksimum kolom partisi. Harus digunakan dengan partitionColumn, lowerBound, dan numPartitions. |
numPartitions |
Tidak. | Jumlah koneksi paralel yang digunakan untuk mengambil data. Jangan tentukan ini terlalu tinggi (ratusan). Harus digunakan dengan partitionColumn, lowerBound, dan upperBound. |
Nota
Ketika Anda menggunakan parameter partisi, keempat parameter (partitionColumn, , lowerBound, upperBoundnumPartitions) harus ditentukan bersama-sama, dan Anda harus menggunakan dbtable opsi alih-alih query.
Snowflake
| Pengaturan | Diperlukan | Description |
|---|---|---|
database |
Yes | Nama database di Snowflake. |
query |
Ya (atau dbtable) |
String kueri SQL untuk dieksekusi pada basis data jarak jauh. Tidak dapat digunakan dengan dbtable. |
dbtable |
Ya (atau query) |
Nama tabel untuk dikueri (nama bagian tunggal atau nama multi-bagian). Tidak dapat digunakan dengan query. |
schema |
Tidak. | Nama skema di Snowflake. Standar: public. |
query_timeout |
Tidak. | Batas waktu tunggu kueri dalam detik. Default: 0 (tidak ada batas waktu). |
partition_size_in_mb |
Tidak. | Ukuran partisi yang diharapkan dalam megabyte untuk pengambilan data paralel. Default: 100 MB. |
BigQuery
| Pengaturan | Diperlukan | Description |
|---|---|---|
query |
Ya (atau dbtable) |
String kueri SQL untuk dieksekusi pada basis data jarak jauh. Tidak dapat digunakan dengan dbtable. |
dbtable |
Ya (atau query) |
Nama tabel yang akan dikueri. Tidak dapat digunakan dengan query. |
materializationDataset |
Ya jika materialisasi hasil diperlukan. Materialisasi diperlukan jika query ditentukan dan jika dbtable menunjuk ke tampilan. |
Nama himpunan data BigQuery tempat tabel sementara diwujudkan. Time-to-live (TTL) tabel sementara secara default adalah 24 jam. |
materializationProject |
Tidak. | ID proyek BigQuery untuk proses materialisasi. Default ke proyek yang ditentukan dalam koneksi. |
materializationEnabled |
Tidak. | Apakah akan mengaktifkan materialisasi untuk kueri. Setel true untuk memeriksa tampilan. Default: false jika dbtable ditentukan, true jika query ditentukan. |
parentProject |
Tidak. | ID proyek induk untuk tujuan penagihan. |
Penting
Semua parameter BigQuery peka terhadap huruf besar/kecil.
Opsi kontrol pushdown tambahan
Anda dapat menggabungkan remote_query fungsi dengan operasi Databricks SQL, dan sebagian besar operasi tersebut juga dapat didorong ke bawah. Anda juga dapat mengontrol operasi Databricks SQL mana yang dapat didorong ke bawah. Opsi ini berlaku untuk semua jenis koneksi dan tidak sensitif terhadap huruf besar/kecil.
| Pengaturan | Bawaan | Description |
|---|---|---|
pushdown.limit.enabled |
true |
Aktifkan atau nonaktifkan pendorongan LIMIT klausa ke database jarak jauh. |
pushdown.offset.enabled |
true |
Aktifkan atau nonaktifkan pendorongan OFFSET klausa ke database jarak jauh. |
pushdown.filters.enabled |
true |
Aktifkan atau nonaktifkan pendorongan WHERE filter ke database jarak jauh. |
pushdown.aggregates.enabled |
true |
Aktifkan atau nonaktifkan pendorongan fungsi agregat (COUNT, SUM, AVG, MAX, MIN) ke database jarak jauh. |
pushdown.sortLimit.enabled |
true |
Aktifkan atau nonaktifkan penerusan kueri top-N (kombinasi ORDER BY dan LIMIT) ke database jarak jauh. |
Secara default, semua pushdown diaktifkan. Anda dapat menonaktifkan pushdown tertentu jika diperlukan untuk pemecahan masalah atau mengatasi masalah kompatibilitas dengan database jarak jauh tertentu.
Mendelegasikan akses melalui antarmuka tampilan
Anda dapat mendelegasikan akses ke data jarak jauh tanpa memberikan hak istimewa langsung USE CONNECTION kepada pengguna dengan membungkus remote_query fungsi dalam tampilan. Pendekatan ini memiliki manfaat berikut:
-
Kontrol akses yang disederhanakan: Berikan
SELECThak istimewa pada tampilan alih-alih mengelolaUSE CONNECTIONhak istimewa. - Keamanan data: Mengontrol kolom dan baris mana yang dapat diakses pengguna dengan menentukan kueri tampilan.
- Lacak silsilah data: Lacak akses data melalui silsilah tampilan daripada penggunaan koneksi langsung.
Untuk mendelegasikan akses melalui tampilan:
Buat tampilan yang memanggil
remote_queryfungsi:CREATE VIEW sales_data_view AS SELECT * FROM remote_query( 'my_connection', database => 'sales_db', query => 'SELECT region, product, revenue FROM sales' );Berikan
SELECThak istimewa pada tampilan kepada pengguna atau grup:GRANT SELECT ON VIEW sales_data_view TO <user-or-group>;Pengguna sekarang dapat mengkueri tampilan tanpa memerlukan
USE CONNECTIONhak istimewa:SELECT * FROM sales_data_view WHERE region = 'US';
Penting
Pemilik tampilan harus memiliki USE CONNECTION hak istimewa pada koneksi. Saat pengguna mengkueri tampilan, pemeriksaan akses koneksi dilakukan menggunakan hak istimewa pemilik tampilan, bukan hak istimewa pengguna yang mengkueri.
Examples
Eksekusi kueri dasar
Jalankan kueri pada database PostgreSQL:
SELECT * FROM remote_query(
'my_postgres_connection',
database => 'sales_db',
query => 'SELECT * FROM orders WHERE order_date > CURRENT_DATE - INTERVAL \'30 days\''
);
Mengkueri tabel tertentu
Mengkueri tabel MySQL secara langsung:
SELECT * FROM remote_query(
'my_mysql_connection',
database => 'inventory',
dbtable => 'my_schema.products'
);
Oracle dengan nama layanan
Menjalankan kueri pada database Oracle:
SELECT * FROM remote_query(
'my_oracle_connection',
service_name => 'ORCL',
query => 'SELECT * FROM customers WHERE ROWNUM <= 1000'
);
Kueri BigQuery
Kueri Google BigQuery:
SELECT * FROM remote_query(
'my_bigquery_connection',
materializationDataset => 'analytics',
query => 'SELECT * FROM `project.dataset.table` WHERE created_date > DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)'
);
Kueri Snowflake
Kueri Snowflake:
SELECT * FROM remote_query(
'my_snowflake_connection',
database => 'ANALYTICS_DB',
query => 'SELECT * FROM SALES WHERE SALE_DATE >= DATEADD(day, -30, CURRENT_DATE())'
);
Penyetelan performa dengan pemartisian
Ambil data secara paralel dari tabel SQL Server:
SELECT * FROM remote_query(
'my_sqlserver_connection',
database => 'sales',
dbtable => 'transactions',
partitionColumn => 'transaction_id',
lowerBound => '0',
upperBound => '1000000',
numPartitions => '10',
fetchsize => '1000'
);
Gabungkan dengan operasi Databricks SQL
Terapkan filter dan transformasi tambahan:
SELECT customer_id, SUM(amount) as total_amount
FROM remote_query(
'my_postgres_connection',
database => 'orders_db',
query => 'SELECT customer_id, amount, order_date FROM orders'
)
WHERE order_date >= '2025-01-01'
GROUP BY customer_id
HAVING total_amount > 1000
ORDER BY total_amount DESC
LIMIT 100;
Membuat tampilan untuk akses yang didelegasikan
Buat tampilan yang membungkus fungsi remote_query. Pengguna dengan SELECT hak istimewa pada tampilan dapat mengkueri data tanpa memerlukan USE CONNECTION hak istimewa pada koneksi yang mendasar:
CREATE VIEW sales_summary AS
SELECT * FROM remote_query(
'my_mysql_connection',
database => 'sales',
query => 'SELECT region, product, SUM(revenue) as total_revenue FROM sales_data GROUP BY region, product'
);
GRANT SELECT ON VIEW sales_summary TO <user-or-group>;
Mengontrol perilaku pushdown
Saat Anda menggunakan fungsi remote_query, Databricks dapat meneruskan operasi tambahan ke database jarak jauh di luar kueri yang Anda tentukan. Fitur ini berguna saat Anda mengkueri tampilan yang menggunakan remote_query fungsi .
Operasi berikut dapat didorong ke bawah:
-
Filter:
WHEREklausa yang diterapkan ke hasil kueri jarak jauh -
Proyeksi: Pemilihan kolom (
SELECTkolom tertentu) -
Batas:
LIMITklausa untuk membatasi jumlah baris yang dikembalikan -
Offset:
OFFSETklausa untuk melewati baris -
Agregat: Fungsi agregasi seperti
COUNT, ,SUMAVG,MAX,MIN -
Top-N: Kombinasi
ORDER BYdanLIMITuntuk kueri N atas/bawah
Dukungan pushdown bervariasi tergantung pada sumber data. Lihat dokumentasi untuk jenis koneksi spesifik Anda untuk detailnya.
Nonaktifkan pushdown tertentu untuk pemecahan masalah atau kompatibilitas:
SELECT * FROM remote_query(
'my_postgres_connection',
database => 'analytics',
query => 'SELECT * FROM complex_view',
`pushdown.aggregates.enabled` => 'false',
`pushdown.filters.enabled` => 'false'
);
Keterbatasan
Operasi baca-saja: Fungsi
remote_queryhanya mendukungSELECTkueri. Operasi modifikasi data (INSERT, , UPDATEDELETE, MERGE), operasi DDL (CREATE, DROP, ALTER) dan prosedur tersimpan tidak didukung.Validasi kueri: Kueri yang Anda berikan dijalankan langsung pada database jarak jauh. Databricks memvalidasi bahwa kueri bersifat baca-saja dengan melakukan inspeksi skema, tetapi validasi sintaksis dan semantik dilakukan oleh database jarak jauh.
Troubleshooting
Kesalahan izin
Jika Anda menerima kesalahan izin, verifikasi bahwa:
- Anda memiliki
USE CONNECTIONhak istimewa pada koneksi atauSELECThak istimewa pada tampilan yang membungkus fungsi. - Kredensial dalam koneksi memiliki izin yang sesuai pada database jarak jauh.
Contoh kesalahan:
PERMISSION_DENIED: User does not have USE CONNECTION on Connection 'my_connection'
Resolusi:
GRANT USE CONNECTION ON CONNECTION my_connection TO <user-or-group>;
Parameter yang tidak didukung
Jika Anda menerima kesalahan tentang parameter yang tidak didukung, periksa apakah Anda menggunakan parameter yang benar untuk jenis koneksi Anda. Pesan kesalahan mencantumkan parameter yang diizinkan.
Contoh kesalahan:
REMOTE_QUERY_FUNCTION_UNSUPPORTED_CONNECTOR_PARAMETERS: The following parameters are not supported for connection type 'postgresql': 'materializationDataset'. Allowed parameters for this connection type are: 'database', 'query', 'dbtable', 'fetchsize', 'partitionColumn', 'lowerBound', 'upperBound', 'numPartitions'.
Resolusi: Hapus parameter yang tidak didukung dan gunakan parameter yang benar untuk jenis koneksi Anda.
Operasi DML tidak didukung
Fungsi ini remote_query hanya mendukung kueri baca-saja SELECT .
Contoh kesalahan:
DML_OPERATIONS_NOT_SUPPORTED_FOR_REMOTE_QUERY_FUNCTION: Data modification operations are not supported in remote_query function.
Resolusi: Hapus setiap pernyataan INSERT, UPDATE, DELETE, atau DDL dari kueri Anda. Hanya gunakan SELECT instruksi.