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.

Ö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, tüm yeni Delta tabloları için sıvı kümeleme ö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 işleri her zamanki gibi artımlı küme verilerine çalıştırın OPTIMIZE . 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()

Uyarı

Sıvı kümeleme etkinleştirilmiş olarak oluşturulan tablolarda, Delta yazıcı sürüm 7 ve okuyucu sürüm 3'te etkinleştirilmiş çok sayıda Delta tablo özelliği vardır. 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>)

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ümelemesi ü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 izleme 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, yaygın olarak kullanılan sorgu filtrelerine göre kümeleme anahtarlarının seçilmesini önerir. Kümeleme anahtarları herhangi bir sırada tanımlanabilir. İki sütun bağıntılıysa, bunlardan yalnızca birini kümeleme anahtarı olarak eklemeniz gerekir.

Kümeleme anahtarları olarak en fazla 4 sütun belirtebilirsiniz. Yalnızca kümeleme anahtarları için toplanan istatistikleri içeren sütunları belirtebilirsiniz. Varsayılan olarak, Delta tablosundaki ilk 32 sütunda istatistikler toplanır. Bkz . Delta istatistik sütunlarını belirtme.

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)
  • String
  • Tamsayı
  • Uzun
  • Kısa
  • Satışa Arz
  • Çift
  • 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.

Yazmada kümeleyen işlemler şunlardır:

  • INSERT INTO işlem
  • 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 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 . Delta Lake 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.

Databricks, en iyi performans için küme verilerine düzenli OPTIMIZE işler 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ı kümeleme artımlı olduğundan, kümelenmiş tablolar için işlerin çoğu OPTIMIZE hızla çalışır.

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 özelliklerini bırakma.

Sınırlamalar

Şu sınırlamalar geçerlidir:

  • Databricks Runtime 15.1 ve altında, yazmada kümeleme filtreleri, birleşimleri veya toplamaları içeren kaynak sorguları desteklemez.
  • Yapılandırılmış Akış iş yükleri, yazmada kümelemeyi desteklemez.
  • 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 var olan bir tabloya sıvı kümeleme etkin veri yazabilirsiniz.