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

Önemli

Delta Lake sıvı kümeleme, Databricks Runtime 13.3 ve üzeri sürümlerin Genel Önizleme sürümünde kullanılabilir. Databricks Runtime 12.2 LTS ve üzerinde sıvı kümeleme desteği mevcuttur. Bkz. Sıvı kümeleme ile tablolar için uyumluluk.

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.

Uyarı

Databricks Runtime 13.3 LTS ve üzeri, sıvı kümelemenin etkinleştirildiği Delta tabloları oluşturmak, yazmak veya OPTIMIZE delta tabloları oluşturmak için gereklidir.

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

Mevcut bir tabloda veya tablo oluşturma sırasında sıvı kümesini etkinleştirebilirsiniz. Kümeleme, bölümleme veya ZORDERile uyumlu değildir ve Azure Databricks istemcisinin tablonuzdaki veriler için tüm düzen ve iyileştirme işlemlerini yönetmesini gerektirir. Etkinleştirildikten sonra işleri normal şekilde çalıştırarak OPTIMIZE artımlı olarak küme verileri oluşturun. 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) USING DELTA 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.format("delta").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.format("delta").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?.

Databricks Runtime 13.3 LTS ve üzerinde, 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, 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
  • Boolean

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.

Çoğu işlem, yazma işlemindeki verileri otomatik olarak kümelemiyor. Yazmada kümeleyen işlemler şunlardır:

  • INSERT INTO işlem
  • CTAS raporları
  • COPY INTO Parquet biçiminden
  • spark.write.format("delta").mode("append")

Not

Yazmada kümeleme en iyi çaba uygulamasıdır ve aşağıdaki durumlarda uygulanmaz:

  • Yazma işlemi 512 GB veriyi aşarsa.
  • SELECT Alt sorgu bir dönüştürme, filtre veya birleştirme içeriyorsa.
  • Öngörülen sütunlar kaynak tabloyla aynı değilse.

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

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, sıvı kümelemenin etkinleştirildiği tablolardan okuyan veya yazan tüm iş yükleri için Databricks Runtime 13.3 LTS veya üzerini kullanmanızı önerir.

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:

  • 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.
  • Kümeleme anahtarları olarak en fazla 4 sütun belirtebilirsiniz.
  • Yapılandırılmış Akış iş yükleri, yazmada kümelemeyi desteklemez.