Aracılığıyla paylaş


işlevini kullanarak dış veritabanlarını remote_query sorgulama

Önemli

Bu özellik Genel Önizleme aşamasındadır.

remote_query Tablo değerli işlevi (TVF), uzak sistemin yerel SQL söz dizimini kullanarak Doğrudan Azure Databricks'in içinden dış veritabanlarına ve veri ambarlarına karşı SQL sorguları çalıştırmanızı sağlar. Bu işlev, sorgu federasyonuna esnek bir alternatif sağlayarak uzak veritabanının diyalektinde yazılan sorguları Databricks SQL'e çevirmenize gerek kalmadan çalıştırmanıza olanak tanır.

remote_query sorgu federasyonuyla karşılaştırıldığında

Aşağıdaki tabloda, remote_query işlevi ve sorgu federasyonu arasındaki temel farklar özetlenmektedir.

Özellik remote_query fonksiyon Sorgu Birleşimi
Sorgu söz dizimi Uzak veritabanının yerel SQL diyalektini kullanarak sorgular yazın (örneğin, Oracle PL/SQL, BigQuery SQL). Databricks SQL söz dizimlerini kullanarak sorgular yazın. Databricks, uyumlu işlemleri çevirir ve uzak veritabanına iletir.
Kullanım örneği
  • Değişiklik yapmadan çalıştırmak istediğiniz uzak veritabanının diyalektinde yazılmış sql sorgularınız var.
  • Databricks SQL'de kullanılamayabilecek veritabanına özgü işlevleri veya söz dizimlerini kullanmanız gerekir.
  • Yabancı kataloglar oluşturmadan uzak verilere geçici erişim istiyorsunuz.
  • Databricks SQL söz dizimlerini kullanarak dış verileri sorgulamak istiyorsunuz.
  • Unity Kataloğu'ndaki dış kataloglar aracılığıyla yönetilen erişime sahip uzun vadeli bir veri erişim modeli gereklidir.
  • Tutarlı söz dizimi kullanarak birden çok kaynaktan gelen verileri tek bir sorguda birleştirmek istiyorsunuz.
  • Sorgu yazmak için Genie yardımcısını kullanmak istiyorsunuz.
Erişim denetimi Bağlantı üzerinde USE CONNECTION yetkisine sahip olmaları gerekir. İzin, görünümler aracılığıyla devredilebilir. Kullanıcıların yabancı katalog nesnelerinde tablo düzeyinde ayrıcalıklara sahip olması gerekir. Ayrıntılı denetim.

Başlamadan önce

Çalışma alanı gereksinimleri:

  • Unity Kataloğu için etkinleştirilen çalışma alanı.

İşlem gereksinimleri:

  • Databricks Runtime kümenizden veya SQL ambarından hedef veritabanı sistemlerine ağ bağlantısı. Bkz: Lakehouse Federasyonu için Ağ Önerileri.
  • Azure Databricks kümeleri Databricks Runtime 17.3 veya üzerini kullanmalıdır.
  • SQL ambarları Pro veya Sunucusuz olmalıdır ve sürüm 2025.35 veya üzerini kullanmalıdır.

Gerekli izinler:

  • Bağlantı oluşturmak için Unity Kataloğu meta veri deposunda ayrıcalığınız olmalıdır CREATE CONNECTION .
  • remote_query işlevini kullanmak için, bağlantıda USE CONNECTION ayrıcalığına sahip olmalısınız veya işlevi saran bir görünümde SELECT ayrıcalığına sahip olmalısınız. Tek kullanıcılı kümeler ayrıca bağlantı üzerindeki MANAGE iznini gerektirir.

Bağlantı oluştur

işlevini kullanmak remote_query için önce dış veritabanınıza bir Unity Kataloğu bağlantısı oluşturmanız gerekir. Sorgu federasyonu için zaten oluşturulmuş bir bağlantınız varsa, yeniden kullanabilirsiniz.

remote_query işlevi aşağıdaki bağlantı türlerine bağlantıları destekler:

Mevcut bağlantıları yönetme hakkında bilgi için bkz Lakehouse Federation için Bağlantıları Yönetme.

Bağlantı erişimi verme

remote_query işlevini kullanmak için, bağlantıda USE CONNECTION ayrıcalığına sahip olmanız gerekir (veya tek kullanıcılı kümelerde MANAGE ayrıcalığı).

GRANT USE CONNECTION ON CONNECTION <connection-name> TO <user-or-group>;

remote_query işlevini kullanma

İşlev uzak remote_query veritabanında bir sorgu çalıştırır ve sonuçları Databricks SQL sorgularında kullanabileceğiniz bir tablo olarak döndürür.

Sözdizimi

SELECT * FROM remote_query(
  '<connection-name>',
  <option-key> => '<option-value>'
  [, <option-key> => '<option-value>' ...]
)

Gerekli parametreler

  • connection-name: Kullanılacak Unity Kataloğu bağlantısının adı.

Diğer tüm gerekli parametreler bağlantı türüne göre değişir. Ayrıntılar için bkz . Bağlayıcıya özgü seçenekler .

Bağlayıcıya özgü seçenekler

Kullanılabilir seçenekler bağlantı türüne göre değişir. Aşağıdaki tablolarda her bağlayıcı için seçenekler açıklanmaktadır.

MySQL, PostgreSQL, SQL Server, Redshift ve Teradata

Parametre Gerekli Description
database Yes Uzak sistemdeki veritabanı adı.
query Evet (veya dbtable) Uzak veritabanında çalıştırılacak bir SQL sorgu dizesi. dbtable ile kullanılamaz.
dbtable Evet (veya query) Sorgu için tablo adı. query ile kullanılamaz.
fetchsize Hayı Gidiş dönüş başına getirilecek satır sayısı. Daha büyük değerler performansı artırabilir ancak daha fazla bellek kullanabilir. Varsayılan: 0 (sürücü varsayılanı kullan).
partitionColumn Hayı Paralel veri getirme için kullanılacak tekdüzen dağıtılmış değerlere sahip bir sütun. lowerBound, upperBound, ve numPartitions ile kullanılmalıdır. seçeneğiyle query kullanılamaz.
lowerBound Hayı Bölüm sütununun minimum değeri. partitionColumn, upperBound, ve numPartitions ile kullanılmalıdır.
upperBound Hayı Bölüm sütununun en büyük değeri. partitionColumn, lowerBound, ve numPartitions ile kullanılmalıdır.
numPartitions Hayı Veri getirmek için kullanılacak paralel bağlantı sayısı. Bunu çok yüksek (yüzlerce) olarak ayarlamayın. partitionColumn, lowerBound, ve upperBound ile kullanılmalıdır.

Uyarı

Bölüm parametrelerini kullandığınızda, dört parametrenin de (partitionColumn, lowerBound, upperBound, numPartitions) birlikte belirtilmesi ve yerine seçeneğini dbtablekullanmanız query gerekir.

Oracle

Parametre Gerekli Description
service_name Yes Oracle hizmet adı (yerine databasekullanılır).
query Evet (veya dbtable) Uzak veritabanında çalıştırılacak bir SQL sorgu dizesi. dbtable ile kullanılamaz.
dbtable Evet (veya query) Sorgu için tablo adı. query ile kullanılamaz.
fetchsize Hayı Gidiş dönüş başına getirilecek satır sayısı. Daha büyük değerler performansı artırabilir ancak daha fazla bellek kullanabilir. Varsayılan: 0 (sürücü varsayılanı kullan).
partitionColumn Hayı Paralel veri getirme için kullanılacak tekdüzen dağıtılmış değerlere sahip bir sütun. lowerBound, upperBound, ve numPartitions ile kullanılmalıdır. seçeneğiyle query kullanılamaz.
lowerBound Hayı Bölüm sütununun minimum değeri. partitionColumn, upperBound, ve numPartitions ile kullanılmalıdır.
upperBound Hayı Bölüm sütununun en büyük değeri. partitionColumn, lowerBound, ve numPartitions ile kullanılmalıdır.
numPartitions Hayı Veri getirmek için kullanılacak paralel bağlantı sayısı. Bunu çok yüksek (yüzlerce) olarak ayarlamayın. partitionColumn, lowerBound, ve upperBound ile kullanılmalıdır.

Uyarı

Bölüm parametrelerini kullandığınızda, dört parametrenin de (partitionColumn, lowerBound, upperBound, numPartitions) birlikte belirtilmesi ve yerine seçeneğini dbtablekullanmanız query gerekir.

Snowflake

Parametre Gerekli Description
database Yes Snowflake'deki veritabanı adı.
query Evet (veya dbtable) Uzak veritabanında çalıştırılacak bir SQL sorgu dizesi. dbtable ile kullanılamaz.
dbtable Evet (veya query) Sorgu için tablo adı (tek parçalı ad veya çok parçalı ad). query ile kullanılamaz.
schema Hayı Snowflake'teki şema adı. Varsayılan: public.
query_timeout Hayı Sorgu zaman aşımı süresi saniye olarak. Varsayılan: 0 (zaman aşımı yok).
partition_size_in_mb Hayı Paralel veri getirme için megabayt cinsinden beklenen bölüm boyutu. Varsayılan: 100 MB.

BigQuery

Parametre Gerekli Description
query Evet (veya dbtable) Uzak veritabanında çalıştırılacak bir SQL sorgu dizesi. dbtable ile kullanılamaz.
dbtable Evet (veya query) Sorgu için tablo adı. query ile kullanılamaz.
materializationDataset Evet, sonuçların malzeme haline getirilmesi gerekiyorsa. Eğer query belirtilirse ve dbtable bir görünüme işaret ederse gerçekleştirme gerekir. Geçici tabloların oluşturulduğu BigQuery veri kümesinin adı. Geçici tabloların varsayılan yaşam süresi (TTL) 24 saattir.
materializationProject Hayı Gerçekleştirme işlemi için BigQuery proje kimliği. Bağlantıda belirtilen projeyi varsayılan ayar olarak kullanır.
materializationEnabled Hayı Sorgular için canlandırmanın etkinleştirilip etkinleştirilmemesi. Sorgu görünümlerini true olarak ayarlayın. Varsayılan: false belirtilirse dbtable , true belirtilirse query .
parentProject Hayı Faturalama amacıyla ana proje kimliği.

Önemli

Tüm BigQuery parametreleri büyük/küçük harfe duyarlıdır.

İlave pushdown kontrol seçenekleri

İşlevi remote_query Databricks SQL işlemleriyle birleştirebilirsiniz ve bu işlemlerin çoğu da aşağı gönderilebilir. Ayrıca hangi Databricks SQL işlemlerinin aşağı gönderilebileceğini de denetleyebilirsiniz. Bu seçenekler tüm bağlantı türleri için geçerlidir ve büyük/küçük harfe duyarlı değildir.

Parametre Varsayılan Description
pushdown.limit.enabled true Uzak veritabanına LIMIT ifadelerini aktarmayı etkinleştirin veya devre dışı bırakın.
pushdown.offset.enabled true Uzak veritabanına OFFSET ifadelerini aktarmayı etkinleştirin veya devre dışı bırakın.
pushdown.filters.enabled true Uzak veritabanına aşağıya doğru WHERE filtrelerin iletimini etkinleştirin veya devre dışı bırakın.
pushdown.aggregates.enabled true Toplama işlevlerini (COUNT, SUM, , AVG, MAXMIN) uzak veritabanına göndermeyi etkinleştirin veya devre dışı bırakın.
pushdown.sortLimit.enabled true Uzak veritabanına üst N sorgularını (ve ORDER BYbirleşimiLIMIT) göndermeyi etkinleştirin veya devre dışı bırakın.

Varsayılan olarak, tüm düşürmeler etkinleştirilir. Gerekirse belirli işlemleri devre dışı bırakabilir, sorun gidermek veya belirli uzak veritabanlarıyla uyumluluk problemlerini aşabilirsiniz.

Görünümler aracılığıyla erişim yetkilendirme

İşlevi bir görünümde sarmalayarak, USE CONNECTION kullanıcılara doğrudan remote_query ayrıcalıklar vermeden uzak verilere erişim yetkisi tanıyabilirsiniz. Bu yaklaşımın aşağıdaki avantajları vardır:

  • Basitleştirilmiş erişim denetimi: SELECT ayrıcalığı görünümde verin, USE CONNECTION ayrıcalıklarını yönetmek yerine.
  • Veri güvenliği: Kullanıcıların görünüm sorgusunu tanımlayarak hangi sütun ve satırlara erişebileceğini kontrol edin.
  • Kökeni izleme: Doğrudan bağlantı kullanımı yerine kökenleri görüntüleme yoluyla veri erişimini izleyin.

Bir görünüm aracılığıyla erişim yetkisi vermek için:

  1. İşlevi remote_query çağıran bir görünüm oluşturun:

    CREATE VIEW sales_data_view AS
    SELECT * FROM remote_query(
      'my_connection',
      database => 'sales_db',
      query => 'SELECT region, product, revenue FROM sales'
    );
    
  2. Kullanıcılara veya gruplara görünümde ayrıcalık verin SELECT :

    GRANT SELECT ON VIEW sales_data_view TO <user-or-group>;
    
  3. Kullanıcılar artık USE CONNECTION ayrıcalığına gerek kalmadan görünümü sorgulayabilir.

    SELECT * FROM sales_data_view WHERE region = 'US';
    

Önemli

Görünüm sahibinin bağlantı üzerinde USE CONNECTION ayrıcalığı olmalıdır. Kullanıcılar görünümü sorguladığında, bağlantı erişim denetimi sorgulayan kullanıcının ayrıcalıklarını değil görünüm sahibinin ayrıcalıkları kullanılarak gerçekleştirilir.

Örnekler

Temel sorgu yürütme

PostgreSQL veritabanında sorgu yürütme:

SELECT * FROM remote_query(
  'my_postgres_connection',
  database => 'sales_db',
  query => 'SELECT * FROM orders WHERE order_date > CURRENT_DATE - INTERVAL \'30 days\''
);

Belirli bir tabloyu sorgulama

MySQL tablosunu doğrudan sorgula:

SELECT * FROM remote_query(
  'my_mysql_connection',
  database => 'inventory',
  dbtable => 'my_schema.products'
);

Hizmet adıyla Oracle

Oracle veritabanını sorgulama:

SELECT * FROM remote_query(
  'my_oracle_connection',
  service_name => 'ORCL',
  query => 'SELECT * FROM customers WHERE ROWNUM <= 1000'
);

BigQuery sorgusu

Google BigQuery'i sorgulama:

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)'
);

Snowflake sorgusu

Snowflake’i Sorgulamak

SELECT * FROM remote_query(
  'my_snowflake_connection',
  database => 'ANALYTICS_DB',
  query => 'SELECT * FROM SALES WHERE SALE_DATE >= DATEADD(day, -30, CURRENT_DATE())'
);

Bölümleme ile performans ayarlama

SQL Server tablosundan paralel olarak veri getirme:

SELECT * FROM remote_query(
  'my_sqlserver_connection',
  database => 'sales',
  dbtable => 'transactions',
  partitionColumn => 'transaction_id',
  lowerBound => '0',
  upperBound => '1000000',
  numPartitions => '10',
  fetchsize => '1000'
);

Databricks SQL işlemleriyle birleştir

Ek filtreler ve dönüştürmeler uygulayın:

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;

Temsilci erişimi için görünüm oluşturma

remote_query işlevini saran bir görünüm oluşturun. Görünüm üzerinde SELECT ayrıcalığına sahip olan kullanıcılar, alttaki bağlantıda USE CONNECTION ayrıcalığına ihtiyaç duymadan verileri sorgulayabilir.

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>;

Aşağı gönderme davranışını denetleme

işlevini kullandığınızda remote_query Databricks, belirttiğiniz sorgunun ötesinde uzak veritabanına ek işlemler gönderebilir. Bu özellik, işlevini kullanan remote_query bir görünümü sorguladığınızda kullanışlıdır.

Aşağıdaki işlemler aşağı gönderilebilir:

  • Filtreler: WHERE uzak sorgu sonucuna uygulanan cümleler
  • Projeksiyonlar: Sütun seçimi (SELECT belirli sütunlar)
  • Sınır: LIMIT döndürülen satır sayısını kısıtlamak için ifadeler
  • Ofset: OFFSET Satırları atlamak için koşullar
  • Toplamalar: COUNT, SUM, AVG, MAX gibi toplam işlevleriMIN
  • Top-N: İlk/alt N sorguları için ORDER BY ve LIMIT birleşimi

İtme desteği veri kaynağına bağlı olarak değişiklik gösterir. Ayrıntılar için belirli bağlantı türünüzle ilgili belgelere bakın.

Sorun giderme veya uyumluluk amacıyla belirli yayılma seçeneklerini devre dışı bırakın:

SELECT * FROM remote_query(
  'my_postgres_connection',
  database => 'analytics',
  query => 'SELECT * FROM complex_view',
  `pushdown.aggregates.enabled` => 'false',
  `pushdown.filters.enabled` => 'false'
);

Sınırlamalar

  • Salt okunur işlemler: remote_query işlevi yalnızca SELECT sorgularını destekler. Veri değiştirme işlemleri (INSERT, UPDATE, DELETE, MERGE), DDL işlemleri (CREATE, DROP, ALTER) ve saklı yordamlar desteklenmez.

  • Sorgu doğrulama: Sağladığınız sorgu doğrudan uzak veritabanında yürütülür. Databricks şema incelemesi gerçekleştirerek sorgunun salt okunur olduğunu doğrular, ancak söz dizimi ve anlam doğrulama uzak veritabanı tarafından gerçekleştirilir.

Sorun giderme

İzin hataları

İzin hatası alırsanız şunları doğrulayın:

  1. Bağlantı üzerinde USE CONNECTION veya işlevi sarmalayan bir görünüm üzerinde SELECT ayrıcalığınız vardır.
  2. Bağlantıdaki kimlik bilgileri uzak veritabanında uygun izinlere sahiptir.

Örnek hata:

PERMISSION_DENIED: User does not have USE CONNECTION on Connection 'my_connection'

Çözüm:

GRANT USE CONNECTION ON CONNECTION my_connection TO <user-or-group>;

Desteklenmeyen parametreler

Desteklenmeyen parametrelerle ilgili bir hata alırsanız, bağlantı türünüz için doğru parametreleri kullanıp kullanmadığınıza bakın. Hata iletisinde izin verilen parametreler listelenir.

Örnek hata:

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'.

Çözüm: Desteklenmeyen parametreyi kaldırın ve bağlantı türünüz için doğru parametreleri kullanın.

DML işlemleri desteklenmiyor

remote_query işlevi yalnızca salt okunur SELECT sorguları destekler.

Örnek hata:

DML_OPERATIONS_NOT_SUPPORTED_FOR_REMOTE_QUERY_FUNCTION: Data modification operations are not supported in remote_query function.

Çözüm: Sorgunuzdan tüm INSERT, UPDATE, DELETE veya DDL deyimlerini kaldırın. Yalnızca SELECT deyimlerini kullanın.

Ek kaynaklar