OPTIMIZE

Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime

Bu sayfada Delta Lake verilerinin OPTIMIZE düzenini en iyi duruma getiren komutu açıklanmaktadır. Verilerin bir alt kümesini iyileştirebilir veya verileri sütuna göre birlikte kullanabilirsiniz. Birlikte bulundurma belirtmezseniz ve tablo sıvı kümelemesi kullanmıyorsa Delta Lake, kutu paketleme iyileştirmesi gerçekleştirir.

Sözdizimi

OPTIMIZE table_name [FULL] [WHERE predicate]
  [ZORDER BY (col_name1 [, ...] ) ]

Not

Paketleme iyileştirmesi bir kez etkili olur: Aynı veri kümesinde iki kez çalıştırırsanız, ikinci çalıştırmanın hiçbir etkisi olmaz. Disk üzerindeki boyutlarına göre eşit dengeli veri dosyaları üretir, ancak dosya başına tanımlama grubu sayısı olması gerekmez. İki ölçü en sık bağıntılı.

Z-Ordering bir kez etkili değildir, ancak artımlı olarak çalışır. Z-Ordering'in aldığı sürenin birden çok çalıştırmaya göre azaldığı garanti değildir. Ancak, yalnızca Z-Ordered olan bir bölüme yeni veri eklenmediyse, söz konusu bölümde yeniden Z-Ordering çalıştırmanın hiçbir etkisi olmaz. Z-Ordering, tanımlama grubu sayısına göre eşit dengeli veri dosyaları oluşturur, ancak diskte veri boyutu olması gerekmez. İki ölçü genellikle bağıntılı olur, ancak en iyi duruma getirme görev sürelerinde dengesizlik, ayrıştığında ortaya çıkabilir.

Not

Databricks Runtime kullanırken çıkış dosyası boyutunu denetlemek için Spark yapılandırmasınıspark.databricks.delta.optimize.maxFileSize ayarlayın. Varsayılan değer (1 GB) değeridir 1073741824 . Belirtilmesi 104857600 , dosya boyutunu 100 MB olarak ayarlar.

Parametre

  • table_name

    Var olan bir Delta tablosunu tanımlar. Ad bir zamansal belirtim veya seçenek belirtimi içermemelidir.

  • FULL

    Şunlar için geçerlidir: evet Olarak işaretlendi Databricks Runtime 16.0 ve üzerini işaretleyin

    Tablodaki tüm veri dosyalarını yeniden yazar. Şu şekilde kullanın OPTIMIZE table_name FULL :

    • Daha önce kümelenmiş veriler de dahil olmak üzere tablonun tamamını iyileştirin ( sıvı kümeleme kullanan tablolar için).
    • özelliğini kullanarak tablonun sıkıştırma codec bileşenini değiştirdiğinizde mevcut veri dosyalarını yeniden sıkıştırın delta.parquet.compression.codec .

    Sıkıştırma codec'ini değiştirdikten sonra mevcut verileri yeniden sıkıştırmak için komutunu çalıştırın OPTIMIZE table_name FULL:

    -- Change compression codec
    ALTER TABLE table_name SET TBLPROPERTIES ('delta.parquet.compression.codec' = 'ZSTD');
    
    -- Recompress all existing data files
    OPTIMIZE table_name FULL;
    

    Sıvı kümelemesi etkinleştirilmiş bir tablodaki dosyaların alt kümesini iyileştirmek için bir koşul (Databricks Runtime 18.1 ve üzeri) ile birleştirin FULLWHERE . Yalnızca tek bir kümeleme sütunundaki basit aralık önkoşulları desteklenir. Bir dosya, aralığının herhangi bir bölümü koşulla çakışıyorsa eklenir. Örneğin, OPTIMIZE events FULL WHERE date > 15 dosyanın aralığı koşulla çakıştığı için aralığı (col_min = 10, col_max = 20) olan bir dosya içerir.

  • WHERE

    Bir bölüm / kümeleme koşuluyla eşleşen satırların alt kümesini iyileştirir. Yalnızca bölümleme/ kümeleme anahtarı özniteliklerindeki filtreler desteklenir.

    Sıvı kümeleme kullanan tablolar için bunun yerine (Databricks Runtime 18.1 ve üzeri) kullanın OPTIMIZE table_name FULL WHERE predicate .

  • ZORDER BY

    Not

    Databricks, Z sırası yerine tüm yeni tablolar için sıvı kümelemesi önerir. Bkz Tablolar için sıvı kümeleme kullanma.

    Sütun bilgilerini aynı dosya kümesinde birleştirir. Delta Lake veri atlama algoritmaları, okunması gereken veri miktarını azaltmak için ortak yerellik kullanır. Birden çok sütunu virgülle ayrılmış liste olarak belirtebilirsiniz, ancak her ek sütunda ortak yerelliğin etkinliği azalır.

    Bu yan tümceyi sıvı kümeleme kullanan tablolarda kullanamazsınız.

Örnekler

> OPTIMIZE events;

> OPTIMIZE events FULL;

> -- Partitioned table
> OPTIMIZE events WHERE date >= '2017-01-01';

> -- Table with liquid clustering enabled (DBR 18.1 and above)
> OPTIMIZE events FULL WHERE date >= '2025-01-01';

> OPTIMIZE events
    WHERE date >= current_timestamp() - INTERVAL 1 day
    ZORDER BY (eventType);

Daha fazla bilgi için bkz. Veri dosyası düzenini iyileştirme.