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.
Sıvı kümeleme, ve tablo bölümlemini ZORDERdeğiştiren bir veri düzeni iyileştirme tekniğidir. Tablo yönetimini basitleştirir ve verileri kümeleme anahtarlarına göre otomatik olarak düzenleyerek sorgu performansını iyileştirir.
Geleneksel bölümlemeden farklı olarak, kümeleme anahtarlarını mevcut verileri yeniden yazmadan yeniden tanımlayabilirsiniz. Bu, değişen analitik gereksinimlerin yanı sıra veri düzeninizin de gelişmesine olanak tanır. Sıvı kümeleme hem akış tabloları hem de gerçekleştirilmiş görünümler için geçerlidir.
Important
Liquid Clustering, Databricks Runtime 15.4 LTS ve üzeri sürümlerde Delta Lake tabloları için genel kullanıma sunulmuştur; Databricks Runtime 16.4 LTS ve üzeri sürümlerde ise Apache Iceberg tabloları için Genel Önizleme kapsamındadır. Databricks, en iyi performans için en son Databricks Runtime'ın kullanılmasını önerir.
Yönetilen Apache Iceberg v3 tabloları ayrıca silme vektörlerini, satır izlemeyi, satır düzeyinde eşzamanlılığı ve otomatik sıvı kümelemeyi destekler. Bu özellikler Databricks Runtime 18.0 ve üzerini gerektirir. Bkz. Apache Iceberg v3 özelliklerini kullanma.
Sıvı kümeleme ne zaman kullanılır?
Databricks akış tabloları ve gerçekleştirilmiş görünümler de dahil olmak üzere tüm yeni tablolar için liquid clustering'i önerir. Aşağıdaki senaryolar özellikle kümelemeden yararlanıyor:
- Yüksek kardinalite sütunlarını filtreleyen sorgular.
- Ağır veri kayması olan tablolar.
- Bakım ve ayarlama eforu gerektiren hızlı büyüyen tablolar.
- Eşzamanlı yazma gereksinimleri olan tablolar.
- Çeşitli veya değişen erişim desenlerine sahip tablolar.
- Tipik bir bölüm anahtarının çok fazla veya çok az bölümden sonuç döndürebileceği tablolar.
Sıvı kümelemasını etkinleştirme
Var olan bir bölümlenmemiş tabloda veya tablo oluşturma sırasında sıvı kümeleme özelliğini etkinleştirebilirsiniz. Kümeleme, bölümleme veya ZORDERile uyumlu değildir. Databricks, platformun tablonuzdaki veriler için tüm düzen ve iyileştirme işlemlerini yönetmesine izin vermenizi önerir. Sıvı kümeleme özelliğini etkinleştirdikten sonra, OPTIMIZE işler yürüterek verileri artımlı olarak kümeleyin. Bkz. Kümelemeyi tetikleme.
Kümeleme ile tablo oluşturma
Sıvı kümelemini CLUSTER BY etkinleştirmek için, aşağıdaki örneklerde gösterildiği gibi tümceciği bir tablo oluşturma deyimine ekleyin. Databricks Runtime 14.3 LTS ve üzerinde, Delta Lake tablolarında sıvı kümelemeye olanak tanımak için Python veya Scala'da DataFrame API'lerini ve DeltaTable API'sini kullanabilirsiniz.
SQL
Kümeleme ile boş bir tablo oluşturmak için:
CREATE TABLE table1 (col0 INT, col1 STRING) CLUSTER BY (col0);
Kümeleme ile mevcut verilerden tablo oluşturmak için, CLUSTER BY yan tümcesinde değil, tablo adından SELECT sonra görünmelidir:
CREATE TABLE table2 CLUSTER BY (col0)
AS SELECT * FROM table1;
Kümeleme yapılandırması dahil olmak üzere bir tablo yapısını kopyalamak için:
CREATE TABLE table3 LIKE table1;
Python
API kullanarak DeltaTable kümeleme ile boş bir tablo oluşturmak için:
(DeltaTable.create()
.tableName("table1")
.addColumn("col0", dataType = "INT")
.addColumn("col1", dataType = "STRING")
.clusterBy("col0")
.execute())
Mevcut bir DataFrame'den tablo oluşturmak için:
df = spark.read.table("table1")
df.write.clusterBy("col0").saveAsTable("table2")
API'yi DataFrameWriterV2 kullanarak bir tablo oluşturmak için (Databricks Runtime 14.2 ve üzerinde kullanılabilir):
df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()
Scala
API kullanarak DeltaTable kümeleme ile boş bir tablo oluşturmak için:
DeltaTable.create()
.tableName("table1")
.addColumn("col0", dataType = "INT")
.addColumn("col1", dataType = "STRING")
.clusterBy("col0")
.execute()
Mevcut bir DataFrame'den tablo oluşturmak için:
val df = spark.read.table("table1")
df.write.clusterBy("col0").saveAsTable("table2")
API'yi DataFrameWriterV2 kullanarak bir tablo oluşturmak için (Databricks Runtime 14.2 ve üzerinde kullanılabilir):
val df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()
Important
Kümeleme anahtarlarını ayarlamak için DataFrame API'lerini kullanırken, kümeleme sütunlarını yalnızca tablo oluşturma sırasında veya overwrite modunda (CREATE OR REPLACE TABLE türü işlemlerle) tanımlayabilirsiniz. Modu kullanırken append kümeleme anahtarlarını değiştiremezsiniz.
Verileri eklerken var olan bir tablodaki kümeleme anahtarlarını değiştirmek için SQL ALTER TABLE komutlarını kullanarak kümeleme yapılandırmasını veri yazma işlemlerinizden ayrı olarak değiştirin. Bkz. Kümeleme anahtarlarını değiştirme.
Databricks Runtime 16.4 LTS ve üzerinde, aşağıdaki örneklerde olduğu gibi Yapılandırılmış Akış yazma işlemlerini kullanarak sıvı kümeleme özelliği etkinleştirilmiş tablolar oluşturabilirsiniz:
SQL
CREATE TABLE table1 (
col0 STRING,
col1 DATE,
col2 BIGINT
)
CLUSTER BY (col0, col1);
Python
(spark.readStream.table("source_table")
.writeStream
.clusterBy("column_name")
.option("checkpointLocation", checkpointPath)
.toTable("target_table")
)
Scala
spark.readStream.table("source_table")
.writeStream
.clusterBy("column_name")
.option("checkpointLocation", checkpointPath)
.toTable("target_table")
Warning
Sıvı kümeleme özelliği etkinleştirilmiş Delta Lake tablolarında Delta yazıcı sürüm 7 ve okuyucu sürüm 3 kullanılır. Bu protokolleri desteklemeyen Delta istemcileri bu tabloları okuyamaz. Tablo protokolü sürümlerini düşüremezsiniz. Bkz . Delta Lake özellik uyumluluğu ve protokolleri.
Silme vektörleri gibi varsayılan özellik etkinleştirmesini geçersiz kılmak için bkz . Varsayılan özellik etkinleştirmeyi geçersiz kılma (isteğe bağlı).
Mevcut tablolarda etkinleştir
Mevcut bölümlenmemiş Delta Lake tablosunda sıvı kümeleme özelliğini etkinleştirmek için aşağıdakileri yapın:
ALTER TABLE <table_name>
CLUSTER BY (<clustering_columns>)
Yönetilen Apache Iceberg tabloları için aşağıdakileri göz önünde bulundurun:
- v2 belirtimini içeren tablolar için, var olan bir tabloda sıvı kümeleme özelliğini etkinleştirirken silme vektörlerini ve satır izlemeyi açıkça kapatmanız gerekir.
- v3 belirtimli tablolar için silme vektörleri ve satır izleme desteklendiğinden bu özelliklerin kapatılması gerekmez. Bkz. Apache Iceberg v3 özelliklerini kullanma.
Note
Varsayılan davranış, önceden yazılmış verilere kümeleme uygulamaz. Yeniden kümelemeyi zorlamak için OPTIMIZE FULL veya OPTIMIZE FULL WHERE <predicate> kullanın. Bkz Yeniden sıralamaya zorlama.
Bölümlenmiş tabloyu sıvı kümelemeye dönüştürme
Databricks Runtime 18.1 ve sonraki sürümlerde, mevcut bölümlenmiş bir Delta Lake tablosunu liquid clustering’e dönüştürmek için, REPLACE PARTITIONED BY WITH CLUSTER BY deyiminde ALTER TABLE kullanın. Dönüştürme, okuma ve yazma işlemlerindeki kesinti süresini en aza indirir ve hem dış hem de yönetilen tabloları destekler. Dönüştürmeden sonra, tablo Databricks Runtime 13.3 LTS ve üzeri ile okumaları destekler.
Note
Yönetilen Iceberg tablolarında dönüştürme gerekli değildir çünkü bu tablolar bölüm tanımlarını sıvı kümeleme anahtarları olarak kullanır. Dönüştürme komutunu çalıştırmak bir hataya neden olur.
Bölümlenmiş tabloları sıvı kümelemeye dönüştürmenin avantajları şunlardır:
- Veri atlamanın yetersiz olduğu veya aşırı bölümlenmiş tablolar için performans iyileştirmeleri.
- Sık değişen sorgu kalıplarına sahip tablolar için
CLUSTER BY AUTOkullanılarak otomatik performans iyileştirmeleri. - Kümeleme sütunları esnektir ve değiştirilmesi kolaydır, ancak bölümleme katıdır ve değiştirilmesi zordur.
- Sıvı kümelemeli tablolar satır düzeyinde eşzamanlılık sağladığından yazma çakışmaları azaltıldı. Bkz. Satır düzeyi eşzamanlılık.
Syntax
ALTER TABLE <table_name>
REPLACE PARTITIONED BY WITH CLUSTER BY [( <clustering_columns> ) | AUTO]
CLUSTER BY yan tümcesi aşağıdaki seçenekleri destekler:
-
( <clustering_columns> ): Yeni kümeleme sütunlarını belirtir. Databricks, yeni kümeleme sütunlarının özgün bölüm sütunlarına benzer şekilde tutulmasını önerir. Çok farklı sütunların kullanılması, ilkOPTIMIZEçalıştırmada büyük bir yeniden sıralama işlemini tetikler. -
AUTO: Geçerli bölüm sütunlarını ilk kümeleme sütunları olarak kullanır ve tahmine dayalı iyileştirmenin zaman içinde uyum sağlamasına olanak tanır. Yalnızca Unity Kataloğu yönetilen tablolarında kullanılabilir. Bkz. Otomatik sıvı kümeleme. - Belirtilen seçenek yok: Geçerli bölüm sütunlarını yeni kümeleme sütunları olarak kullanır.
Bölümlenmiş tablolardan geçiş yaparken kümeleme anahtarlarını seçme yönergeleri için bkz. Bölümlemeden veya Z düzeninden geçiş.
Examples
Orijinal bölümleme sütunlarından farklı sütunlarda kümeleme yapmak için, örneğin (year, month, day) üzerinde bölümlenmiş bir tablo için, aşağıdakileri yapın:
ALTER TABLE t1 REPLACE PARTITIONED BY WITH CLUSTER BY (day, id);
OPTIMIZE t1;
Note
Kümeleme sütunlarını değiştirme avantajından yararlanmak için komutunu çalıştırmanız OPTIMIZEgerekir.
Otomatik sıvı kümeleme özelliğini kullanmak ve geçerli bölüm sütunlarıyla başlamak için aşağıdakileri yapın:
ALTER TABLE t2 REPLACE PARTITIONED BY WITH CLUSTER BY AUTO;
Geçerli bölüm sütunlarını kümeleme sütunları olarak tutmak için aşağıdakileri yapın:
ALTER TABLE t3 REPLACE PARTITIONED BY WITH CLUSTER BY;
Dönüştürme sırasında eşzamanlı okuma ve yazma işlemlerini işleme
Dönüştürme işleminden sonra Databricks Runtime 13.3 LTS ve üzeri okuma ve yazma işlemleri için desteklenir. Azure Databricks dönüştürme sırasında tabloyu okuyan veya tabloya yazan iş yükleri için Databricks Runtime 15.4 LTS ve üzerini önerir.
Dönüştürme sırasında eşzamanlı okuma ve yazma iş yüklerinin nasıl işleneceğini öğrenmek için aşağıdaki tabloya bakın:
| İş yükü türü | Dönüştürme sırasında yapılan okumalar | Dönüştürme sırasında yazma işlemleri |
|---|---|---|
| Batch | Kesinti süresi yok. Tüm Databricks Runtime sürümleri dönüştürme sırasında tabloyu okuyabilir. | Databricks Runtime 15.4 ve üzeri sürümlerde kesinti süresi yok. Databricks Runtime 15.3 ve altı için Databricks, dönüştürmeden önce iş yüklerini duraklatmanızı ve dönüştürme tamamlandıktan sonra iş yüklerini yeniden başlatmanızı önerir. |
| Streaming |
Şema izleme ve sütun eşleme ile: İşlemeleri kaybetmeden akışı yeniden başlatın. Şema izleme ve sütun eşlemesi olmadığında: Akış bir özel durum hatası verir. Yeni bir denetim noktası konumu ve başlangıç sürümüyle yeniden başlatın. Commitler kaybolmaz. |
Herhangi bir commit'i kaybetmeden akışı yeniden başlatın. |
Dönüştürmeyi doğrulama veya geri alma
Dönüştürmeyi onaylamak için komutunu çalıştırarak DESCRIBE EXTENDED yeni kümeleme sütunlarını görün. Bir dizi DESCRIBE HISTORY işlemi, bir REORG işlemi ve bir UPGRADE PROTOCOL işlemi görmek için REPLACE PARTITIONED BY WITH CLUSTER BY çalıştırın.
Bir dönüştürmeyi geri almak için, önceki sürüme dönmek üzere RESTORE kullanın. Alternatif olarak, tabloyu REPLACE TABLE ... PARTITIONED BY (...) AS SELECT * FROM ... kullanarak yeniden yazabilirsiniz.
RESTORE kullanarak geri alma işlemini gerçekleştirmek için aşağıdaki komutları çalıştırın:
ALTER TABLE my_table CLUSTER BY NONE;
ALTER TABLE my_table UNSET TBLPROPERTIES ('delta.liquid.hierarchicalClusteringColumns');
RESTORE TABLE my_table TO VERSION AS OF <version_number_before_conversion>;
Bkz. RESTORE.
Zaman damgası sütunuyla bölümlenmiş tabloyu dönüştürme
Zaman damgası sütunu () ile bölümlenmiş bir tabloyu (t1timestamp_col) dönüştürmek ve zaman damgası sütununu kümeleme anahtarı olarak kullanmak için ek yapılandırmalar ayarlamanız gerekir:
SET spark.databricks.delta.liquidConversion.statsGeneration.enabled = false;
ALTER TABLE t1 REPLACE PARTITIONED BY WITH CLUSTER BY (timestamp_col, id);
ANALYZE TABLE t1 COMPUTE DELTA STATISTICS;
Zaman damgası bölüm sütununu bu yapılandırmalar olmadan kümeleme sütununa dönüştürmeye çalışırsanız, komut bir hata oluşturur:
ALTER TABLE REPLACE PARTITIONED BY WITH CLUSTER BY cannot auto-generate stats on table with column event_ts due to unsupported type: timestamp. Disable stats auto-generation by setting 'spark.databricks.delta.liquidConversion.statsGeneration.enabled' to 'false' and retry the command again. SQLSTATE: 42000
Dönüştürme sınırlamaları
Dönüştürme komutu için REPLACE PARTITIONED BY WITH CLUSTER BY aşağıdaki sınırlamalar geçerlidir:
- Lakeflow ardışık düzenlerinde oluşturulan akış tabloları ve somutlaştırılmış görünümler desteklenmemektedir. Sıvı kümelemeyi kullanmak için işlem hattı tanımını
CLUSTER BYyerinePARTITIONED BYkullanacak şekilde güncellemeniz gerekir. - Bölüm filtreleme ile Delta Sharing kullanan tablolar desteklenmez. Delta Sharing için bölüm filtreleme hakkında bilgi için bkz. Paylaşılacak tablo bölümlerini belirtme.
Kümeleme anahtarlarını kaldırma
Kümeleme anahtarlarını kaldırmak için aşağıdaki söz dizimini kullanın:
ALTER TABLE table_name CLUSTER BY NONE;
Kümeleme anahtarlarını seçme
Sorgu filtrelerinde en sık kullanılan sütunlara göre kümeleme anahtarlarını seçin. Doğru anahtarlar, veri atlama ve sorgu performansını önemli ölçüde geliştirir.
İpucu
Databricks, sorgu desenlerinize göre kümeleme anahtarlarını akıllı bir şekilde seçmek için otomatik sıvı kümelemenin kullanılmasını önerir. Bkz. Otomatik sıvı kümeleme.
Önemli seçim yönergeleri
Kümeleme anahtarlarını el ile belirttiğinizde, sorgu filtrelerinde en sık kullanılan sütunlara göre sütunları seçin. Kümeleme anahtarlarını istediğiniz sırada tanımlayabilirsiniz. İki sütun yüksek oranda bağıntılıysa, bunlardan yalnızca birini kümeleme anahtarı olarak eklemeniz gerekir.
En fazla dört kümeleme anahtarı belirtebilirsiniz. Daha küçük tablolar için (10 TB'tan az), tek bir sütunda filtreleme yaparken daha fazla kümeleme anahtarı kullanılması performansı düşürebilir. Örneğin, dört tuşla filtreleme, iki anahtarla filtrelemekten daha kötü bir performans gösterir. Ancak tablo boyutu arttıkça bu performans farkı tek sütunlu sorgular için göz ardı edilebilir hale gelir.
Kümeleme anahtarları, istatistiklerin toplandığı sütunlar olmalıdır. Delta Lake tabloları varsayılan olarak ilk 32 sütun için istatistikleri toplar. Bkz. İstatistik sütunlarını belirtme.
Desteklenen veri türleri
Kümeleme, kümeleme anahtarları için şu veri türlerini destekler:
- Date
- Zaman damgası
- TimestampNTZ (Databricks Runtime 14.3 LTS ve üzeri)
- String
- Tamsayı, Uzun, Kısa, Bayt
- Kayan, Çift, Ondalık
Bir StructField öğesine göre, CLUSTER BY (struct_col.field) gibi nokta gösterimini kullanarak kümeleyebilirsiniz. İç içe yapı alanları, CLUSTER BY (struct_col.nested.field) gibi, herhangi bir derinlikte desteklenir. Alanın veri türü, önceki listede desteklenen türlerden biri olmalıdır.
Aşağıdakilerden herhangi birine göre kümeleyemezsiniz:
-
StructType,MapTypeveyaArrayTypegibi karmaşık türler -
MapTypeveArrayTypeöğeleri, örneğinmap_col['key'],array_col[0]veyamap_col.key.
Bölümlemeden veya Z düzeninden geçiş
Important
Databricks, komutuyla REPLACE PARTITIONED BY WITH CLUSTER BY otomatik dönüştürmeyi kullanmanızı önerir. Bkz . Bölümlenmiş tabloyu sıvı kümelemeye dönüştürme.
Mevcut bir tabloyu dönüştürüyorsanız aşağıdaki önerileri göz önünde bulundurun:
| Geçerli veri iyileştirme tekniği | Kümeleme anahtarları için öneri |
|---|---|
| Hive stili bölümleme | Bölüm sütunlarını kümeleme anahtarları olarak kullanın. |
| Z sırası dizin oluşturma |
ZORDER BY Sütunları kümeleme anahtarları olarak kullanın. |
| Hive stili bölümleme ve Z sırası | Kümeleme anahtarları olarak hem bölüm sütunlarını hem ZORDER BY de sütunları kullanın. |
| Kardinaliteyi azaltmak için oluşturulan sütunlar (örneğin, zaman damgasının tarihi) | Özgün sütunu kümeleme anahtarı olarak kullanın ve oluşturulan bir sütun oluşturmayın. |
Otomatik sıvı kümeleme
Databricks Runtime 15.4 LTS ve üzerinde Unity Kataloğu tarafından yönetilen Delta Lake tabloları için otomatik sıvı kümelemeyi etkinleştirebilirsiniz. Unity Kataloğu tarafından yönetilen Apache Iceberg v3 tablolarında otomatik sıvı kümeleme için Databricks Runtime 18.0 ve üzeri gerekir. Otomatik sıvı kümelenme, Azure Databricks'in CLUSTER BY AUTO yan tümcesini kullanarak sorgu performansını optimize etmek için kümeleme anahtarlarını akıllıca seçmesini sağlar.
Note
Otomatik sıvı kümeleme, Lakeflow işlem hatları ve bağımsız işlem hatları dahil olmak üzere somutlaştırılmış görünümler ve akış tabloları için de desteklenmektedir. İşlem hattınızda veya SQL tanımınızda belirtin CLUSTER BY AUTO .
Otomatik sıvı kümeleme nasıl çalışır?
Otomatik sıvı kümeleme, otomatik anahtar seçimi ve kümeleme işlemleri için tahmine dayalı iyileştirme gerektirir ve zaman uyumsuz olarak çalışır. Bkz. Unity Kataloğu tarafından yönetilen tablolar için tahmine dayalı optimizasyon.
Otomatik sıvı kümeleme, kullanım desenlerinize göre akıllı iyileştirmeler uygular:
- Sorgu iş yükünü analiz eder: Azure Databricks tablonun geçmiş sorgu iş yükünü analiz eder ve kümeleme için en iyi aday sütunları tanımlar.
- Değişikliklere uyarlar: Sorgu desenleriniz veya veri dağıtımlarınız zaman içinde değişirse, otomatik sıvı kümeleme performansı iyileştirmek için yeni anahtarlar seçer.
- Maliyet algılayan seçim: Azure Databricks kümeleme anahtarlarını yalnızca veri atlama iyileştirmelerinden elde edilen tahmin edilen maliyet tasarrufları veri kümeleme maliyetinden daha ağır bastığında değiştirir.
Otomatik sıvı kümelemesi aşağıdaki nedenlerle anahtarları seçemeyebilir:
- Tablo, sıvı kümelemeden yararlanamayacak kadar küçük.
- Tablo, önceki manuel anahtarlardan veya sorgu kalıpları ile eşleşen doğal ekleme düzenine göre zaten etkin bir kümeleme düzenine sahiptir.
- Tabloda sık kullanılan sorgular yoktur.
- Databricks Runtime 15.4 LTS veya üzerini kullanmıyorsunuz.
Veri ve sorgu özellikleri ne olursa olsun, Unity Kataloğu tarafından yönetilen tüm tablolar için otomatik sıvı kümelemeyi uygulayabilirsiniz. Buluşsal yöntemler, kümeleme anahtarlarını seçmenin maliyet açısından yararlı olup olmadığına karar verir.
Databricks Runtime sürüm uyumluluğu
Sıvı kümelediğini destekleyen tüm Databricks Runtime sürümlerinden otomatik kümeleme özelliği etkinleştirilmiş tabloları okuyabilir veya yazabilirsiniz. Ancak akıllı anahtar seçimi, Databricks Runtime 15.4 LTS'de sunulan meta verilere dayanır.
Otomatik olarak seçilen anahtarların tüm iş yüklerinize fayda sağladığından ve yeni anahtarları seçerken bu iş yüklerinin dikkate alındığından emin olmak için Databricks Runtime 15.4 LTS veya üzerini kullanın.
Otomatik sıvı kümelemasını etkinleştirme veya kapatma
SQL
Otomatik sıvı kümeleme sahip bir tablo oluşturmak için:
CREATE OR REPLACE TABLE table1 (column01 int, column02 string) CLUSTER BY AUTO;
El ile belirtilen anahtarlara sahip tablolar da dahil olmak üzere mevcut bir tabloda otomatik sıvı kümeleme özelliğini etkinleştirmek için:
ALTER TABLE table1 CLUSTER BY AUTO;
Anahtar seçimi için ilk kümeleme sütunu ipuçlarını ayarlamak için kümeleme anahtarlarını ayarlayın ve ardından otomatik kümeleme özelliğini açın:
ALTER TABLE table1 CLUSTER BY (c1, c2);
ALTER TABLE table1 CLUSTER BY AUTO;
Alternatif olarak, tek bir işlemde ipuçları ayarlamak için Python API'sini kullanın.
Otomatik sıvı kümeleme özelliğini kapatmak için:
ALTER TABLE table1 CLUSTER BY NONE;
Otomatik sıvı kümeleme özelliğini kapatmak ve kümeleme sütunlarını belirtmek için:
ALTER TABLE table1 CLUSTER BY (column01, column02);
Mevcut bir tabloda otomatik sıvı kümelemesi etkinleştirildiyse, otomatik kümeleme kapatılmadan CREATE OR REPLACE table_name çalıştırılır CLUSTER BY AUTO ve kümeleme sütunları korunmaz. Otomatik sıvı kümelemini ve daha önce seçili sütunları korumak için replace deyimine ekleyin CLUSTER BY AUTO . ile CLUSTER BY AUTOtahmine dayalı iyileştirme, en iyi kümeleme anahtarlarını belirlemek için tablonun geçmiş sorgu iş yükünü kullanır.
Python
Python API, Databricks Runtime 16.4 ve üzeri sürümlerde kullanılabilir. Python'i yalnızca tablo oluştururken veya değiştirirken kullanabilirsiniz. Var olan bir tablonun durumunu değiştirmek clusterByAuto için SQL'i kullanın.
DataFrameWriter kullanarak otomatik sıvı kümelemeli bir tablo oluşturmak için:
df = spark.read.table("table1")
df.write
.format("delta")
.option("clusterByAuto", "true")
.saveAsTable(...)
DataFrameWriter kullanarak anahtar seçimi için başlangıç kümeleme sütunu ipuçlarını ayarlamak için:
df.write
.format("delta")
.clusterBy("clusteringColumn1", "clusteringColumn2")
.option("clusterByAuto", "true")
.saveAsTable(...)
DataFrameWriterV2 kullanarak otomatik sıvı kümelemeli bir tablo oluşturmak için:
df.writeTo(...).using("delta")
.option("clusterByAuto", "true")
.create()
DataFrameWriterV2 kullanarak anahtar seçimi için başlangıç kümeleme sütunu ipuçlarını ayarlamak için:
df.writeTo(...).using("delta")
.clusterBy("clusteringColumn1", "clusteringColumn2")
.option("clusterByAuto", "true")
.create()
Otomatik sıvı kümeleme ile bir akış tablosu oluşturmak için:
spark.readStream.table("source_table")
.writeStream
.option("clusterByAuto", "true")
.option("checkpointLocation", checkpointPath)
.toTable("target_table")
Akış tablosunda anahtar seçimi için ilk kümeleme sütunu ipuçlarını ayarlamak için:
spark.readStream.table("source_table")
.writeStream
.clusterBy("column1", "column2")
.option("clusterByAuto", "true")
.option("checkpointLocation", checkpointPath)
.toTable("target_table")
küme anahtarı seçim ipuçlarını ile .clusterBybirlikte kullandığınızda.option('clusterByAuto', 'true'), davranış aşağıdaki gibidir:
- Bu, otomatik sıvı kümelemini ilk kez ayarlarsa, kümeleme sütunları içinde
.clusterBybelirtilen sütunlara ayarlanır. - Bu, otomatik sıvı kümelemenin etkinleştirildiği mevcut bir tabloysa, ipucu yalnızca bir
.clusterBykez kabul edilir. Örneğin,.clusterBytarafından belirtilen sütunlar yalnızca tabloda kümeleme sütunları tanımlı değilse tanımlanır.
Important
DataFrame API'leri kullanılırken, clusterByAuto seçeneği yalnızca overwrite modu kullanılırken ayarlanabilir.
clusterByAuto modu kullanılırken append ayarlayamazsınız. Bu kısıtlama, kümeleme sütunlarını el ile ayarlama işlemiyle aynıdır. Kümeleme ayarlarını yalnızca mod kullanarak overwrite tablo oluşturma veya değiştirme işlemleri sırasında yapılandırabilirsiniz.
Geçici bir çözüm olarak, verileri eklerken var olan bir tablodaki clusterByAuto durumu değiştirmek istiyorsanız SQL komutlarını kullanarak ALTER TABLE kümeleme yapılandırmasını veri yazma işlemlerinizden ayrı olarak değiştirin.
Otomatik kümelemenin etkinleştirilip etkinleştirilmediğini denetleyin
Tabloda otomatik sıvı kümelemenin etkinleştirilip etkinleştirilmediğini denetlemek için DESCRIBE TABLE ya da SHOW TBLPROPERTIES kullanın.
Otomatik sıvı kümeleme etkinse, clusterByAuto özelliği true olarak ayarlanır. özelliği, clusteringColumns otomatik olarak veya el ile seçilen geçerli kümeleme sütunlarını gösterir.
Limitations
Yönetilen Apache Iceberg v2 tablolarında otomatik sıvı kümeleme kullanılamaz. Databricks Runtime 18.0 ve üzeri sürümlerde, yönetilen Apache Iceberg v3 tabloları desteklenir.
Kümelenmiş tabloya veri yazma
Kümelenmiş Delta Lake tablosuna yazmak için, sıvı kümeleme tarafından kullanılan tüm Delta yazma protokolü tablosu özelliklerini destekleyen bir Delta yazıcı istemcisi kullanmanız gerekir. Kümelenmiş bir Iceberg tablosuna yazmak için Unity Kataloğu'nun Iceberg REST Katalog API'sini kullanabilirsiniz. Azure Databricks'da Databricks Runtime 13.3 LTS ve üzerini kullanmanız gerekir.
Yazma sırasında kümelenmeyi destekleyen işlemler
Yazmaya odaklanan işlemler şunlardır:
-
INSERT INTOişlemler -
CTASveRTASdeyimleri -
COPY INTOParquet biçiminden spark.write.mode("append")
Kümeleme için boyut eşikleri
Yazmada kümeleme yalnızca işlemdeki veriler boyut eşiğine uyduğunda tetikler. Bu eşikler kümeleme sütunlarının sayısına göre değişir ve Unity Kataloğu yönetilen tablolarında diğer Delta Lake tablolarına göre daha düşüktür.
| Kümeleme sütunlarının sayısı | Unity Kataloğu tarafından yönetilen tablolar için eşik boyutu | Diğer Delta Lake tabloları için eşik boyutu |
|---|---|---|
| 1 | 64 MB | 256MB |
| 2 | 256MB | 1GB |
| 3 | 512MB | 2GB |
| 4 | 1GB | 4GB |
Tüm işlemler sıvı kümelemesi uygulamadığından Databricks, tüm verilerin verimli bir şekilde kümelendiğinden emin olmak için sık çalıştırmayı OPTIMIZE önerir.
veri akışı iş yükleri
Yapılandırılmış Akış iş yükleri, Spark yapılandırmasını spark.databricks.delta.liquid.eagerClustering.streaming.enabled olarak ayarladığınızda yazma işlemi sırasında kümeleme için true desteği sağlar. Bu iş yükleri için kümeleme yalnızca son beş akış güncelleştirmesinden en az birinin yukarıdaki tablodan boyut eşiğini aşması durumunda tetikler.
Kümelemeyi tetikleme
Tahmine dayalı iyileştirme, etkin tablolar için komutları otomatik olarak çalıştırır OPTIMIZE . Bkz. Unity Kataloğu tarafından yönetilen tablolar için tahmine dayalı optimizasyon. Tahmine dayalı iyileştirme kullanılırken Databricks zamanlanmış OPTIMIZE işleri devre dışı bırakmanızı önerir.
Kümelemeye neden olmak için Databricks Runtime 13.3 LTS veya üzerini kullanmanız gerekir. Databricks, büyük tablolarda daha hızlı OPTIMIZE performans için Databricks Runtime 17.3 LTS ve üzerini önerir. Tablonuzda komutunu OPTIMIZE kullanın:
OPTIMIZE table_name;
Sıvı kümelemesi artımlı bir işlemdir; başka bir OPTIMIZE deyişle yalnızca kümeleme gerektiren verileri barındırmak için verileri gerektiği şekilde yeniden yazar.
OPTIMIZE kümelenen verilerle eşleşmeyen kümeleme anahtarlarıyla veri dosyalarını yeniden yazmaz. Bkz Yeniden sıralamaya zorlama.
Tahmine dayalı iyileştirme kullanmıyorsanız Databricks, verileri kümeleme için normal OPTIMIZE işleri zamanlamanızı önerir. Birçok güncelleştirme veya eklemenin yaşandığı tablolar için Databricks, bir veya iki saatte bir OPTIMIZE iş zamanlamanızı önerir. Sıvı gruplandırma artımlı olduğundan, kümelenmiş tablolar için çoğu iş hızlı bir şekilde çalıştırılır.
Yeniden sıralamaya zorla
Databricks Runtime 16.4 LTS ve sonraki sürümlerde, aşağıdaki söz dizimini kullanarak bir tablodaki tüm kayıtların yeniden kümelenmesini zorlayabilirsiniz:
OPTIMIZE table_name FULL;
Important
OPTIMIZE FULL çalıştırılması, mevcut tüm verileri gerektiği gibi yeniden kümelendirir. Daha önce belirtilen anahtarlarda kümelenmemiş büyük tablolar için bu işlem saatler sürebilir.
Kümeleyi ilk kez etkinleştirdiğinizde veya kümeleme anahtarlarını değiştirdiğinizde OPTIMIZE FULL çalıştırın. Daha önce OPTIMIZE FULL çalıştırdıysanız ve kümeleme anahtarlarını değiştirmediyseniz OPTIMIZE FULLOPTIMIZEile aynı şekilde çalışır. Bu senaryoda, OPTIMIZE artımlı bir yaklaşım benimser ve yalnızca daha önce sıkıştırılmamış dosyaları yeniden yazar. Veri düzeninin geçerli kümeleme anahtarlarını yansıtmasını sağlamak için her zaman OPTIMIZE FULL kullanın.
Kısmi yeniden kümeleme
Databricks Runtime 18.1 ve üzerini kullanarak, kayıtların OPTIMIZE FULL WHERE <predicate> bir alt kümesini yeniden sıralamaya zorlayabilirsiniz. Bir dosya, aralığının herhangi bir bölümü koşulla çakışıyorsa eklenir. Bkz. Parametreler.
OPTIMIZE events FULL WHERE event_date >= '2025-01-01';
Kümelenmiş tablodan veri okuma
Kümelenmiş Delta Lake tablosundaki verileri, silme vektörlerini okumayı destekleyen herhangi bir Delta Lake istemcisi kullanarak okuyabilirsiniz. Iceberg REST Katalog API'sini kullanarak kümelenmiş bir Iceberg tablosundaki verileri okuyabilirsiniz. Sıvı kümeleme, kümeleme anahtarlarını filtrelerken otomatik veri atlama yoluyla sorgu performansını geliştirir.
SELECT * FROM table_name WHERE cluster_key_column_name = "some_value";
Kümeleme anahtarlarını yönetme
Tablonun nasıl kümelendiğini görme
Aşağıdaki örneklerde gösterildiği gibi, bir tablonun kümeleme anahtarlarını görmek için komutları kullanabilirsiniz DESCRIBE :
DESCRIBE TABLE table_name;
DESCRIBE DETAIL table_name;
Kümeleme anahtarlarını değiştirme
Aşağıdaki örnekte olduğu gibi bir komut çalıştırarak ALTER TABLE istediğiniz zaman tablonun kümeleme anahtarlarını değiştirebilirsiniz:
ALTER TABLE table_name CLUSTER BY (new_column1, new_column2);
Kümeleme anahtarlarını değiştirdiğinizde, sonraki OPTIMIZE ve yazma işlemleri yeni kümeleme yaklaşımını kullanır, ancak mevcut veriler yeniden yazılmaz. Mevcut verileri güncelleştirilmiş kümeleme anahtarlarıyla yeniden yazmak için bkz. Yeniden sıralamaya zorlama.
Aşağıdaki örnekte olduğu gibi anahtarları NONEolarak ayarlayarak da kümeleme özelliğini kapatabilirsiniz:
ALTER TABLE table_name CLUSTER BY NONE;
Küme anahtarlarının olarak NONE ayarlanması kümelenmiş verileri yeniden yazmaz, ancak gelecekteki OPTIMIZE işlemlerin kümeleme anahtarlarını kullanmasını engeller.
Harici bir motordan sıvı kümelemeyi kullanma
Harici Iceberg motorlarından yönetilen Iceberg tablolarında sıvı kümelemeyi etkinleştirebilirsiniz. Sıvı kümelemeye olanak tanımak için tablo oluştururken bölüm sütunlarını belirtin. Unity Kataloğu bölümleri kümeleme anahtarları olarak yorumlar. Örneğin, OSS Spark'ta aşağıdaki komutu çalıştırın:
CREATE OR REPLACE TABLE main.schema.icebergTable
PARTITIONED BY c1;
Sıvı kümeleme özelliğini kapatmak için:
ALTER TABLE main.schema.icebergTable DROP PARTITION FIELD c2;
Iceberg bölüm evrimi kullanarak kümeleme anahtarlarını değiştirmek için:
ALTER TABLE main.schema.icebergTable ADD PARTITION FIELD c2;
Demet dönüştürmesi kullanarak bir bölüm belirtirseniz Unity Kataloğu ifadeyi bırakır ve sütunu kümeleme anahtarı olarak kullanır:
CREATE OR REPLACE TABLE main.schema.icebergTable
PARTITIONED BY (bucket(c1, 10));
Sıvı kümeleme ile tablolar için uyumluluk
Sıvı kümeleme, okuma ve yazma için belirli Databricks Runtime sürümlerini gerektiren Delta Lake tablo özelliklerini kullanır. Databricks Runtime 14.3 LTS ve üzerinde sıvı kümeleme ile oluşturulan tablolar varsayılan olarak checkpoint V2 kullanır. Databricks Runtime 13.3 LTS ve üzerinde checkpoint V2 ile tabloları okuyabilir ve yazabilirsiniz. Bkz. Checkpoint V2.
Databricks Runtime 12.2 LTS'yi 13.2'ye kullanan okuyucuları desteklemek için, denetim noktası V2'yi devre dışı bırakın ve tablo protokolunu düşürun. Bkz. Klasik sürüme düşürme.
Varsayılan özellik etkinleştirmeyi geçersiz kıl (isteğe bağlı)
Sıvı kümeleme etkinleştirmesi sırasında varsayılan Delta Lake tablosu özellik etkinleştirmesini geçersiz kılabilirsiniz. Bu, bu tablo özellikleriyle ilişkili okuyucu ve yazıcı protokollerinin yükseltılmasını engeller. Aşağıdaki adımları tamamlamak için mevcut bir tablonuz olmalıdır:
Bir veya daha fazla özelliği kapatan tablo özelliğini ayarlamak için kullanın
ALTER TABLE. Örneğin, silme vektörlerini kapatmak için aşağıdakileri çalıştırın:ALTER TABLE table_name SET TBLPROPERTIES ('delta.enableDeletionVectors' = false);Aşağıdakileri çalıştırarak tabloda sıvı kümeleme özelliğini etkinleştirin:
ALTER TABLE <table_name> CLUSTER BY (<clustering_columns>)
Aşağıdaki tabloda geçersiz kılabileceğiniz Delta özellikleri ve etkinleştirmenin Databricks Runtime sürümleriyle uyumluluğu nasıl etkilediği hakkında bilgiler yer alır:
| Delta özelliği | Çalışma zamanı uyumluluğu | Etkinleştirmeyi geçersiz kılmak için özellik | Devre dışı bırakılırsa sıvı kümelenmesi üzerindeki etkiler |
|---|---|---|---|
| Silme vektörleri | Okuma ve yazma işlemleri Databricks Runtime 12.2 LTS ve üzerini gerektirir. | 'delta.enableDeletionVectors' = false |
Silme vektörlerinin kapatılması satır düzeyi eşzamanlılığı da kapatarak işlemlerin ve kümeleme işlemlerinin çakışma olasılığını artırır. Bkz. Satır düzeyi eşzamanlılık.DELETE, MERGEve UPDATE komutları daha yavaş çalışabilir. |
| Satır takibi | Yazma işlemleri Databricks Runtime 13.3 LTS ve üzerini gerektirir. Herhangi bir Databricks Runtime sürümünden okunabilir. | 'delta.enableRowTracking' = false |
Satır izlemenin kapatılması satır düzeyi eşzamanlılığı da kapatarak işlemlerin ve kümeleme işlemlerinin çakışma olasılığını artırır. Bkz. Satır düzeyi eşzamanlılık. |
| Kontrol Noktası V2 | Okuma ve yazma işlemleri Databricks Runtime 13.3 LTS ve üzerini gerektirir. | 'delta.checkpointPolicy' = 'classic' |
Sıvı kümeleme davranışı üzerinde hiçbir etkisi yoktur. Bkz. Checkpoint V2. |
Limitations
- Databricks Runtime 15.1 ve altı: Yazma sırasında kümeleme, filtreler, birleştirmeler veya toplamalar içeren kaynak sorgularını desteklemez.
- Databricks Runtime 15.4 LTS ve altı: Yapılandırılmış Akış yazma kullanarak sıvı kümelemeyi etkinleştirmiş bir tablo oluşturamazsınız. Yapılandırılmış Akış'ı kullanarak liquid clustering etkin olan var olan bir tabloya veri yazabilirsiniz.
-
Apache Iceberg v2: Silme vektörleri ve satır izleme desteklenmediğinden yönetilen Apache Iceberg v2 tablolarında satır düzeyinde eşzamanlılık desteklenmez.
- v3 belirtimi silme vektörlerini ve satır izlemeyi desteklediğinden, yönetilen Apache Iceberg v3 tablolarında satır düzeyi eşzamanlılık desteklenir. Bkz. Apache Iceberg v3 özelliklerini kullanma.