Aracılığıyla paylaş


Delta tabloları için sıvı kümeleme kullanma

Delta Lake sıvı kümeleme, veri düzeni kararlarını basitleştirmek ve ZORDER sorgu performansını iyileştirmek için tablo bölümlemenin yerini alır. Sıvı kümeleme, mevcut verileri yeniden yazmadan kümeleme anahtarlarını yeniden tanımlama esnekliği sağlayarak veri düzeninin zaman içinde analiz gereksinimleriyle birlikte gelişmesine olanak sağlar. Sıvı kümeleme hem Akış Tabloları hem de Gerçekleştirilmiş Görünümler için geçerlidir.

Önemli

Databricks, sıvı kümelemenin etkinleştirildiği tüm tablolar için Databricks Runtime 15.2 ve üzerini kullanmanızı önerir. Sınırlamaları olan genel önizleme desteği Databricks Runtime 13.3 LTS ve üzerinde kullanılabilir.

Not

Sıvı kümeleme özelliği etkinleştirilmiş tablolar Databricks Runtime 13.3 LTS ve üzeri sürümlerinde satır düzeyi eşzamanlılığı destekler. Satır düzeyi eşzamanlılık genellikle Databricks Runtime 14.2 ve üzeri sürümlerinde silme vektörlerinin etkinleştirildiği tüm tablolar için kullanılabilir. Bkz. Azure Databricks'te yalıtım düzeyleri ve yazma çakışmaları.

Sıvı kümeleme ne için kullanılır?

Databricks, hem Akış Tablolarını (ST) hem de Gerçekleştirilmiş Görünümleri (MV) içeren tüm yeni Delta tabloları için sıvı kümelemesini önerir. Aşağıda kümelemeden yararlanan senaryo örnekleri verilmiştir:

  • Genellikle yüksek kardinalite sütunlarına göre filtrelenen tablolar.
  • Veri dağıtımında önemli ölçüde dengesizlik olan tablolar.
  • Hızla büyüyen, bakım ve ayarlama eforu gerektiren tablolar.
  • Eş zamanlı yazma gereksinimlerine sahip tablolar.
  • Zaman içinde değişen erişim desenlerine sahip tablolar.
  • Tipik bir bölüm anahtarının tabloya çok fazla veya çok az bölüm ekleyebildiği tablolar.

Sıvı kümelemasını etkinleştirme

Var olan bir tabloda veya tablo oluşturma sırasında sıvı kümelemasını etkinleştirebilirsiniz. Kümeleme, bölümleme veya ZORDERile uyumlu değildir ve tablonuzdaki verilerin tüm düzen ve iyileştirme işlemlerini yönetmek için Azure Databricks kullanmanızı gerektirir. Sıvı kümeleme etkinleştirildikten sonra OPTIMIZE işleri her zamanki gibi çalıştırarak verileri artımlı olarak kümelenmiş hale getirin. Bkz. Kümelemeyi tetikleme.

Sıvı kümeleme özelliğini etkinleştirmek için, aşağıdaki örneklerde gösterildiği gibi tümceciği bir tablo oluşturma deyimine ekleyin CLUSTER BY :

Not

Databricks Runtime 14.2 ve üzeri sürümleri için Python veya Scala'da DataFrame API'lerini ve DeltaTable API'sini kullanarak sıvı kümelemeye olanak sağlayabilirsiniz.

SQL

-- Create an empty table
CREATE TABLE table1(col0 int, col1 string) CLUSTER BY (col0);

-- Using a CTAS statement
CREATE EXTERNAL TABLE table2 CLUSTER BY (col0)  -- specify clustering after table name, not in subquery
LOCATION 'table_location'
AS SELECT * FROM table1;

-- Using a LIKE statement to copy configurations
CREATE TABLE table3 LIKE table1;

Python

# Create an empty table
(DeltaTable.create()
  .tableName("table1")
  .addColumn("col0", dataType = "INT")
  .addColumn("col1", dataType = "STRING")
  .clusterBy("col0")
  .execute())

# Using a CTAS statement
df = spark.read.table("table1")
df.write.clusterBy("col0").saveAsTable("table2")

# CTAS using DataFrameWriterV2
df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()

Scala

// Create an empty table
DeltaTable.create()
  .tableName("table1")
  .addColumn("col0", dataType = "INT")
  .addColumn("col1", dataType = "STRING")
  .clusterBy("col0")
  .execute()

// Using a CTAS statement
val df = spark.read.table("table1")
df.write.clusterBy("col0").saveAsTable("table2")

// CTAS using DataFrameWriterV2
val df = spark.read.table("table1")
df.writeTo("table1").using("delta").clusterBy("col0").create()

Databricks Runtime 16.0 ve üzerinde, aşağıdaki örneklerde olduğu gibi Yapılandırılmış Akış yazma işlemlerini kullanarak sıvı kümeleme özelliğinin etkinleştirildiği tablolar oluşturabilirsiniz:

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")

Uyarı

Sıvı kümeleme etkinleştirilmiş olarak oluşturulan tablolarda, oluşturma anında etkinleştirilen çok sayıda Delta tablo özelliği, Delta yazıcı sürüm 7 ve okuyucu sürüm 3 ile birlikte gelir. Bu özelliklerden bazılarının etkinleştirilmesini geçersiz kılabilirsiniz. Bkz. Varsayılan özellik etkinleştirmesini geçersiz kılma (isteğe bağlı).

Tablo protokolü sürümleri düşürülemez ve kümeleme özelliği etkin olan tablolar, tüm delta okuyucu protokolü tablo özelliklerini desteklemeyen Delta Lake istemcileri tarafından okunamaz. Bkz. Azure Databricks Delta Lake özellik uyumluluğunu nasıl yönetir?.

Aşağıdaki söz dizimini kullanarak var olan bir bölümlenmemiş Delta tablosunda sıvı kümeleme özelliğini etkinleştirebilirsiniz:

ALTER TABLE <table_name>
CLUSTER BY (<clustering_columns>)

Önemli

Varsayılan davranış, önceden yazılmış verilere kümeleme uygulamaz. Tüm kayıtlar için yeniden sıralamayı zorlamak için OPTIMIZE FULLkullanmanız gerekir. Tüm kayıtlar için zorunlu yeniden kümelendirmeye bakın.

Kümeleme anahtarlarını kaldırmak için aşağıdaki söz dizimini kullanın:

ALTER TABLE table_name CLUSTER BY NONE;

Otomatik sıvı kümeleme

Önemli

Otomatik sıvı kümeleme, Genel Önizlemeiçindedir.

Databricks Runtime 15.4 LTS ve üzerinde Unity Kataloğu yönetilen tabloları için otomatik sıvı kümelemeyi etkinleştirebilirsiniz. Otomatik sıvı kümelemeyi etkinleştiren Azure Databricks, sorgu performansını iyileştirmek için kümeleme anahtarlarını akıllı bir şekilde seçer. CLUSTER BY AUTO yan tümcesini kullanarak otomatik sıvı kümelemasını etkinleştirirsiniz.

Etkinleştirildiğinde, otomatik anahtar seçimi ve kümeleme işlemleri bir bakım işlemi olarak zaman uyumsuz olarak çalışır ve tablo için tahmine dayalı iyileştirmenin etkinleştirilmesini gerektirir. Bkz. Unity Kataloğu yönetilen tabloları için tahmine dayalı iyileştirme.

Azure Databricks, kümeleme anahtarlarını tanımlamak için tablonun geçmiş sorgu iş yükünü analiz eder ve en iyi aday sütunları tanımlar. Veri atlama iyileştirmelerinden elde edilen tahmin edilen maliyet tasarrufu, verileri kümeleme maliyetinden daha ağır bastığında kümeleme anahtarları değiştirilir.

Verilerinizi sorgulama yönteminiz zaman içinde değişirse veya veri dağıtımlarınızdaki değişiklikleri sorgularsanız, otomatik sıvı kümeleme performansı iyileştirmek için yeni anahtarlar seçer.

Not

Sıvı kümeleyi destekleyen tüm Databricks Runtime sürümlerinden otomatik kümeleme etkinleştirilen 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 kümeleyi etkinleştirme veya devre dışı bırakma

Otomatik sıvı kümeleme özelliğinin etkinleştirildiği yeni bir tablo oluşturmak için aşağıdaki söz dizimini kullanın:

CREATE OR REPLACE TABLE table_name CLUSTER BY AUTO;

Aşağıdaki örnekte gösterildiği gibi, önceden el ile anahtarlar belirtmiş olan tablolar da dahil olmak üzere mevcut bir tabloda otomatik sıvı kümeleme özelliğini de etkinleştirebilirsiniz:

ALTER TABLE table_name CLUSTER BY AUTO;

El ile belirtilen anahtarları kullanmak için otomatik sıvı kümeleme etkinleştirilmiş tabloları da değiştirebilirsiniz.

Not

clusterByAuto özelliği, otomatik sıvı kümelemasını etkinleştirdiğinizde true olarak ayarlanır. clusteringColumns özelliği, otomatik anahtar seçimiyle seçilen geçerli kümeleme sütunlarını gösterir. Tablo özelliklerinin tam listesini görmek için DESCRIBE EXTENDED table_name çalıştırın.

Varsayılan özellik etkinleştirmeyi geçersiz kıl (isteğe bağlı)

Sıvı kümeleme etkinleştirmesi sırasında Delta tablosu özelliklerini etkinleştiren varsayılan davranışı geçersiz kılabilirsiniz. Bu, bu tablo özellikleriyle ilişkili okuyucu ve yazıcı protokollerinin yükseltilmesini engeller. Aşağıdaki adımları tamamlamak için mevcut bir tablonuz olmalıdır:

  1. Bir veya daha fazla özelliği devre dışı bırakabilen tablo özelliğini ayarlamak için kullanın ALTER TABLE . Örneğin, silme vektörlerini devre dışı bırakmak için aşağıdakileri çalıştırın:

    ALTER TABLE table_name SET TBLPROPERTIES ('delta.enableDeletionVectors' = false);
    
  2. 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 etkileyebileceği hakkında bilgi sağlanmaktadır.

Delta özelliği Çalışma zamanı uyumluluğu Etkinleştirmeyi geçersiz kılmak için özellik Devre dışı bırakmanın sıvı kümelenmesi üzerindeki etkisi
Silme vektörleri Okuma ve yazma işlemleri Databricks Runtime 12.2 LTS ve üzerini gerektirir. 'delta.enableDeletionVectors' = false Satır düzeyi eşzamanlılık devre dışı bırakılarak işlemlerin ve kümeleme işlemlerinin çakışma olasılığı artar. Bkz. Satır düzeyi eşzamanlılık ile yazma çakışmaları.
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 düzeyi eşzamanlılık devre dışı bırakılarak işlemlerin ve kümeleme işlemlerinin çakışma olasılığı artar. Bkz: Satır düzeyi eşzamanlılık ile yazma çakışmaları.
Denetim Noktaları 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.

Kümeleme anahtarlarını seçme

Databricks, desteklenen tablolar için otomatik sıvı kümeleme önerir. Bkz. Otomatik sıvı kümeleme.

Databricks, sorgu filtrelerinde en sık kullanılan sütunlara göre kümeleme anahtarlarının seçilmesini önerir. Kümeleme anahtarları herhangi bir sırada tanımlanabilir. İ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'ın altında), daha fazla kümeleme anahtarı (örneğin, dört) kullanmak, tek bir sütunda filtreleme yaparken performansı daha az kümeleme anahtarı (örneğin, iki) kullanmaya kıyasla düşürebilir. Ancak tablo boyutu arttıkça, tek sütunlu sorgular için daha fazla kümeleme anahtarı kullanılmasıyla ilgili performans farkı göz ardı edilebilir hale gelir.

Yalnızca kümeleme anahtarları olarak istatistiklerin toplandığı sütunları belirtebilirsiniz. Varsayılan olarak, Delta tablosundaki ilk 32 sütunda istatistikler toplanır. Delta istatistik sütunlarını belirtme'ye bakın.

Kümeleme, kümeleme anahtarları için aşağıdaki veri türlerini destekler:

  • Tarih
  • Zaman damgası
  • TimestampNTZ (Databricks Runtime 14.3 LTS veya üzerini gerektirir)
  • Dize
  • Tamsayı
  • Uzun
  • Kısa
  • Yüzmek
  • İki Kat
  • Ondalık
  • Bayt

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.

Kümelenmiş tabloya veri yazma

Sıvı kümeleme tarafından kullanılan tüm Delta yazma protokolü tablosu özelliklerini destekleyen bir Delta yazıcı istemcisi kullanmanız gerekir. Azure Databricks'te Databricks Runtime 13.3 LTS ve üzerini kullanmanız gerekir.

Yazmaya odaklanan işlemler şunlardır:

  • INSERT INTO işlemler
  • CTAS ve RTAS deyimleri
  • COPY INTO Parquet biçiminden
  • spark.write.mode("append")

Yapılandırılmış Akış yazma işlemleri hiçbir zaman yazmada kümeleme tetiklemez. Ek sınırlamalar geçerlidir. Bkz. Sınırlamalar.

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 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 tabloları için eşik boyutu
1 64 MB 256 MB
2 256 MB 1 GB
3 512 MB 2 GB
4 1 GB 4 GB

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.

Kümelemeyi tetikleme

Tahmine dayalı iyileştirme, etkin tablolar için komutları otomatik olarak çalıştırır OPTIMIZE . Bkz. Unity Kataloğu ile yönetilen tablolar için tahmine dayalı iyileştirme.

Kümelemeye neden olmak için Databricks Runtime 13.3 LTS veya üzerini kullanmanız gerekir. OPTIMIZE Aşağıdaki örnekte olduğu gibi tablonuzda komutunu kullanın:

OPTIMIZE table_name;

Sıvı kümeleme artımlı bir işlemdir, yani veriler yalnızca kümelenmesi gereken verileri barındırmak için gerektiği şekilde yeniden yazılır. Kümelenecek verilerle eşleşmeyen kümeleme anahtarları içeren veri dosyaları yeniden yazılmaz.

En iyi performans için, Databricks verilerin kümelenmesi amacıyla düzenli 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.

Tüm kayıtlar için yeniden kümelemeyi zorunlu tut

Databricks Runtime 16.0 ve üstü sürümlerde, aşağıdaki söz dizimini kullanarak bir tablodaki tüm kayıtları tekrar kümelemeye zorlayabilirsiniz.

OPTIMIZE table_name FULL;

Önemli

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. Veri düzeninin geçerli kümeleme anahtarlarını yansıtmasını sağlamak için her zaman OPTIMIZE FULL kullanın.

Kümelenmiş tablodan veri okuma

Silme vektörlerini okumayı destekleyen herhangi bir Delta Lake istemcisi kullanarak kümelenmiş bir tablodaki verileri okuyabilirsiniz. En iyi sorgu sonuçları için, aşağıdaki örnekte olduğu gibi sorgu filtrelerinize kümeleme anahtarlarını ekleyin:

SELECT * FROM table_name WHERE cluster_key_column_name = "some_value";

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.

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ı olarak NONE ayarlamak, kümelenmiş olan verileri yeniden yazmaz, ancak gelecekteki OPTIMIZE işlemlerin kümeleme anahtarlarını kullanmasını engeller.

Tablonun nasıl kümelendiğini görün

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;

Sıvı kümeleme ile tablolar için uyumluluk

Databricks Runtime 14.1 ve üzerinde sıvı kümeleme ile oluşturulan tablolarda varsayılan olarak v2 denetim noktaları kullanılır. Databricks Runtime 13.3 LTS ve üzerinde v2 denetim noktalarıyla tabloları okuyabilir ve yazabilirsiniz.

Databricks Runtime 12.2 LTS ve üzeri sürümlerde sıvı kümeleme sahip tabloları okumak için v2 denetim noktalarını devre dışı bırakabilir ve tablo protokollerini düşürebilirsiniz. Bkz Delta tablosu özelliklerinden vazgeçme.

Sınırlamalar

Şu sınırlamalar geçerlidir:

  • Databricks Runtime 15.1 ve öncesinde, yazma işlemi sırasında kümeleme, filtreler, birleşimler veya toplamalar içeren kaynak sorgularını desteklemez.
  • Yapılandırılmış Akış iş yükleri, yazmada kümelemeyi desteklemez.
  • Databricks Runtime 15.4 LTS ve altında, 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.