Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede Lakehouse Federasyon sorgularının performansını geliştirmeye yönelik yönergeler sağlanmaktadır.
işlecini AND kullanarak birden çok koşulu birleştirme
Databricks Runtime, ağ üzerinden getirilen kayıt sayısını azaltmak için önkoşulları uzak veritabanı altyapısına göndermeye çalışır. Bir koşul aşağı gönderilemiyorsa, uzak veritabanı altyapısında yürütülen sorgu koşulu dışlar, bu nedenle filtrelemenin Databricks Runtime kullanılarak yapılması gerekir. Ancak, filtrenin belirli bir kısmı aşağıya gönderilemiyorsa, AND operatörü ile birleştirilirse filtrenin başka bir kısmı yine de aşağıya gönderilebilir.
Taşınamaz şarta sahip filtreleme
İfadeyi kullanarak kayıtları ada göre filtrelemek için bir not defterinde veya Databricks SQL sorgu düzenleyicisinde aşağıdaki sorguyu ILIKE çalıştırın:
SELECT * FROM foreign_catalog.schema.table WHERE name ILIKE 'john'
İfade ILIKE uygun çeviri olmadığından örneğin MySQL gibi uzak bir veritabanına gönderilemez. Filtrelemenin Databricks Runtime kullanılarak yapılması gerekir.
Uzak veritabanına gönderilen sorgu tüm kayıtları döndürür:
SELECT * FROM catalog.schema.table
İtilebilir ve itilemez koşullarla filtreleme
Kayıtları hem ada hem de tarihe göre filtrelemek için bir not defterinde veya Databricks SQL sorgu düzenleyicisinde aşağıdaki sorguyu çalıştırın:
SELECT * FROM foreign_catalog.schema.table WHERE name ILIKE 'john' AND date > '2025-05-01'
İfade ILIKE , uygun çeviri olmadığından uzak veritabanına (örneğin, MySQL) gönderilemez, ancak tarih karşılaştırması aşağı gönderilebilir. Ad filtreleme hala Databricks Runtime kullanılarak yapılmalıdır, ancak tarih karşılaştırması getirilen kayıt sayısını azaltır.
Uzak veritabanına gönderilen sorgu, kayıtların bir alt kümesini döndürür:
SELECT * FROM catalog.schema.table WHERE date > '2025-05-01'
Uzak veritabanında hangi sorgunun çalıştırılacağını denetleyin
Uzak veritabanına hangi sorgunun gönderileceğini görmek için FORMATTED komutunu çalıştırınEXPLAIN.
Önemli
Uyarlamalı sorgu yürütmesi nedeniyle gerçek sorgu çıktıdaki EXPLAIN FORMATTEDsorgudan farklı olabilir.
Uzak veritabanından getirilen parti boyutunu ayarla
Uzak sistemlerden verileri nasıl getirdiklerini denetlemek için JDBC aktarım protokollerini kullanan aşağıdaki bağlayıcıları yapılandırabilirsiniz.
- Veri Tuğlaları
- Microsoft SQL Server
- Microsoft Azure Synapse
- MySQL
- Oracle
- PostgreSQL
- Salesforce Data 360
- Teradata
JDBC getirme boyutu, gidiş dönüş başına getirilecek satır sayısını belirler. Varsayılan olarak, çoğu JDBC bağlayıcısı verileri atomik olarak getirir. Bu, veri miktarının kullanılabilir belleği aşmasına neden olabilir.
Yetersiz bellek hatalarını önlemek için fetchSize parametresini ayarlayın.
fetchSize sıfır olmayan bir değere ayarlandığında bağlayıcı verileri toplu olarak okur. Toplu iş başına en fazla satır sayısı, fetchSizedeğerine eşittir. Toplu işlerdeki satır sayısı çok küçükse genel sorgu yürütme süresi uzatılabileceğinden Databricks büyük fetchSize bir değer (örneğin, 100,000) belirtmeyi önerir.
Bu parametre, çalışan düğümlerinin verileri toplu olarak okumasına olanak tanır, ancak paralel olarak okumaz.
İşlem gereksinimleri:
- Databricks Runtime 16.1 veya üzeri üzerinde işlem kullanmanız gerekir. SQL ambarları Pro veya Sunucusuz olmalıdır ve 2024.50 kullanmalıdır.
SELECT * FROM mySqlCatalog.schema.table WITH ('fetchSize' 100000)
Bölüm boyutu parametresini ayarlama (Snowflake)
Snowflake, birden çok bölümdeki verilerin getirilmesine olanak tanır ve bu da birden çok yürütücü ve paralel işlemenin katılımını sağlar.
parametresini ayarlayarak partition_size_in_mb uygun bir bölüm boyutu seçin.
Bu parametre, her bölüm için önerilen sıkıştırılmamış boyutu belirtir. Bölüm sayısını azaltmak için daha büyük bir değer belirtin.
Varsayılan değer 100 (MB) olarak ayarlanmıştır.
partition_size_in_mb parametresi önerilen bir boyut ayarlar; bölümlerin gerçek boyutu farklılık gösterebilir.
İşlem gereksinimleri:
- Databricks Runtime 16.1 veya üzeri üzerinde işlem kullanmanız gerekir. SQL ambarları Pro veya Sunucusuz olmalıdır ve 2024.50 kullanmalıdır.
SELECT * FROM snowflakeCatalog.schema.table WITH ('partition_size_in_mb' 1000)
JDBC bağlayıcıları için paralel okumaları etkinleştirme
JDBC aktarım protokollerini destekleyen bağlayıcılar sorguyu bölümleyerek verileri paralel olarak okuyabilir. Aşağıdaki bağlayıcılar için paralel okumaları yapılandırabilirsiniz:
- Veri Tuğlaları
- Microsoft SQL Server
- Microsoft Azure Synapse
- MySQL
- Oracle
- PostgreSQL
- Kızıl Kayma
- Salesforce Data 360
- Teradata
Bu, birden çok yürütücünin verileri eşzamanlı olarak getirmesine olanak tanır ve büyük tablolar için performansı önemli ölçüde artırır.
Paralel okumaları etkinleştirmek için şu parametreleri belirtin:
-
numPartitions: Paralellik için kullanılacak bölüm sayısı -
partitionColumn: Sorguyu bölümlemede kullanılan sayısal sütunun adı -
lowerBound: Bölüm adımını belirlemek için kullanılan en düşükpartitionColumndeğeri -
upperBound: Bölüm adımlarınıpartitionColumnbelirlemek için kullanılan maksimum değer
Önemli
lowerBound ve upperBound değerleri, tablodaki satırları filtrelemek için değil, yalnızca bölüm adımlarını belirlemek için kullanılır. Tablodaki tüm satırlar bölümlere ayrılır ve geri döndürülür.
Bölüm sütunu şu şekilde olmalıdır:
- Sayısal sütun
- Aralık genelinde eşit dağıtılmış
- Daha iyi performans için dizinlenmiş sütun
İşlem gereksinimleri:
- Databricks Runtime 17.1 veya üzerinde işlem kullanmanız gerekir. SQL ambarları Pro veya Sunucusuz olmalıdır ve 2025.25 kullanmalıdır.
Aşağıdaki örnekte, sorgu id sütununa göre 4 paralel bölüme ayrılır ve her bölüm, yaklaşık 250 kimlik içinde bir aralık işler (her bir id ile 1 arasında yalnızca bir kayıt olduğu varsayılarak).
SELECT * FROM mySqlCatalog.schema.table WITH (
'numPartitions' 4,
'partitionColumn' 'id',
'lowerBound' 1,
'upperBound' 1000
)
Paralel okumalarla kaynak veritabanı görünümü kullanma
Uyarı
Federasyon tablosuna referans veren Databricks tarafından oluşturulan bir görünüm sorgulandığında paralel okumalar desteklenmez. Bunun yerine görünümü kaynak veritabanında oluşturun.
Paralel okumaları bir görünümle kullanmak için, görünümü Databricks yerine kaynak veritabanında oluşturun.
Kaynak veritabanında:
CREATE VIEW my_source_database_view AS SELECT * FROM source_database_schema.table;
Ardından Databricks'ten paralel okuma parametrelerini kullanarak görünümü sorgulayın:
SELECT * FROM myfederated_catalog.schema.my_source_database_view WITH (
'numPartitions' 4,
'partitionColumn' 'id',
'lowerBound' 1,
'upperBound' 1000
)
Lakehouse Federasyonu'nda pushdown'a katılın
Önemli
Bu özellik Genel Önizleme aşamasındadır.
Databricks Lakehouse Federation'da birleştirme anında iletme işleminin nasıl çalıştığını öğrenin.
Katılma optimizasyonuna genel bakış
Birleştirme pushdown, Databricks'in verileri getirmek ve birleştirmeyi yerel olarak gerçekleştirmek yerine birleştirme işlemlerini uzak veritabanı motoruna ilettiği bir sorgu optimizasyon tekniğidir. Bu, uzak veritabanının yerleşik birleştirme özelliklerinden yararlanarak ağ trafiğini önemli ölçüde azaltır ve sorgu performansını geliştirir.
Desteklenen veri kaynakları
Aşağıdaki veri kaynakları birleştirme gönderimini destekler:
- Oracle
- PostgreSQL
- MySQL
- SQL Server
- Teradata
- Kızıl Kayma
- Snowflake
- BigQuery
Bu özellik Genel Kullanıma sunulmuştur ve Redshift, Snowflake ve BigQuery için varsayılan olarak etkindir. Aşağıdaki sınırlamalar ve gereksinimler yalnızca Oracle, PostgreSQL, MySQL, SQL Server ve Teradata bağlayıcıları için geçerlidir.
Gereksinimler
- Databricks Runtime 17.2 veya üzerinde işlem kullanmanız gerekir.
- SQL ambarları Pro veya Sunucusuz olmalıdır ve 2025.30 kullanmalıdır.
- Databricks kullanıcı arabiriminin Önizlemeler sayfasında, Federasyon Sorguları İçin Join Pushdown (Genel Önizleme) seçeneğini etkinleştirmeniz gerekiyor.
Sınırlamalar
- Yalnızca iç, sol-dış ve sağ dış birleşimler desteklenir.
- Birleştirme işleminin çocuklarındaki alias'lar yalnızca Databricks Runtime 17.3 ve üzeri sürümlerde desteklenir.
Düğüm hiyerarşisi gereksinimleri
Birleştirmenin aşağı aktarılması için, sol ve sağ alt dalındaki tüm düğümlerin de aktarılabilir olması gerekir. Aşağıdaki kurallar geçerlidir:
- Desteklenen alt düğümler: Gönderme işleminin başarılı olması için sorgu planında birleştirme düğümünün altında yalnızca birleşim, filtre, örnekleme ve tarama düğümleri yer alabilir.
- Desteklenmeyen alt düğümler: Birleştirmenin altındaki sol veya sağ dalda sınır, uzaklık veya toplama işlemleri görünüyorsa birleştirme aşağı gönderilemez.
- Birleştirmelerin üzerindeki işlemler: Birleştirmenin üzerine uygulandığında, toplama, sınır ve kaydırma işlemleri aşağı gönderilebilir.
Desteklenen ve desteklenmeyen birleştirme desenlerini belirleme
-- 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
Birleştirmenizin aşağı gönderildiğini doğrulamak için EXPLAIN FORMATTED kullanın:
EXPLAIN FORMATTED
SELECT *
FROM foreign_catalog.schema.table1 t1
INNER JOIN foreign_catalog.schema.table2 t2
ON t1.id = t2.id
Başarılı bir join pushdown işlemini gösteren örnek çıktı:
== 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]
Bu çıkışta:
-
id_1, Databricks'in sütunların yinelenen adları olduğunda belirsizliği gidermek için otomatik olarak oluşturduğu bir diğer addır. - Yukarıdaki
PushedFilters,PushedJoinsuzak veritabanına gönderilen gerçek birleştirme koşullarını temsil eder. -
PushedFiltersher ilişkideki ([L] ve [R]) her tabloya uygulanan ek filtre koşullarını gösterir.