Veri dosyası düzenini iyileştirme
Unity Kataloğu yönetilen tablolarında tahmine dayalı iyileştirme otomatik olarak çalıştırılır OPTIMIZE
. Databricks, veri bakımını basitleştirmek ve depolama maliyetlerini azaltmak için tüm Unity Kataloğu yönetilen tablolarında tahmine dayalı iyileştirmenin etkinleştirilmesini önerir. Bkz . Delta Lake için tahmine dayalı iyileştirme.
Komut, OPTIMIZE
Delta tablolarında veri düzenini geliştirmek için veri dosyalarını yeniden yazar. Sıvı kümelemenin etkinleştirildiği tablolar için, OPTIMIZE
verileri sıvı kümeleme anahtarlarına göre gruplandırmak için veri dosyalarını yeniden yazar. Bölümleri tanımlanmış tablolar için, dosya sıkıştırma ve veri düzeni bölümler içinde gerçekleştirilir.
Sıvı kümelemeden tablolar isteğe bağlı olarak, yeniden yazmada veri kümelemeye yönelik bir ZORDER BY
yan tümce içerebilir. Databricks bölümler veya ZORDER
diğer veri düzeni yaklaşımları yerine sıvı kümeleme kullanılmasını önerir.
Bkz. OPTIMIZE ETME.
Söz dizimi örnekleri
Şu komutu çalıştırarak sıkıştırmayı tetiklersiniz OPTIMIZE
:
SQL
OPTIMIZE delta.`/data/events`
Python
from delta.tables import *
deltaTable = DeltaTable.forPath(spark, "/data/events")
deltaTable.optimize().executeCompaction()
Scala
import io.delta.tables._
val deltaTable = DeltaTable.forPath(spark, "/data/events")
deltaTable.optimize().executeCompaction()
veya alternatif olarak:
SQL
OPTIMIZE events
Python
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().executeCompaction()
Scala
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().executeCompaction()
Büyük miktarda veriniz varsa ve yalnızca bir alt kümesini iyileştirmek istiyorsanız, kullanarak WHERE
isteğe bağlı bir bölüm koşulu belirtebilirsiniz:
SQL
OPTIMIZE events WHERE date >= '2022-11-18'
Python
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
Scala
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
Not
- Paketleme iyileştirmesi aynı veri kümesinde iki kez çalıştırılırsa ikinci çalıştırmanın hiçbir etkisi olmayacağı anlamına gelir.
- Kutu paketleme, disk üzerindeki boyutlarına göre eşit dengeli veri dosyaları oluşturmayı amaçlar, ancak dosya başına tanımlama grubu sayısı üretmesi gerekmez. Ancak, iki ölçü genellikle bağıntılı.
- İşlemi yürütmek
OPTIMIZE
için Python ve Scala API'leri Databricks Runtime 11.3 LTS ve üzeri sürümleri tarafından kullanılabilir.
Delta tablolarının okuyucuları anlık görüntü yalıtımı kullanır, bu da işlem günlüğünden gereksiz dosyaları kaldırdığında OPTIMIZE
kesintiye uğramadıkları anlamına gelir. OPTIMIZE
tabloda veriyle ilgili hiçbir değişiklik yapmaz, bu nedenle önceki ve sonraki OPTIMIZE
bir okuma aynı sonuçlara sahip olur. OPTIMIZE
Akış kaynağı olan bir tabloda gerçekleştirmek, bu tabloyu kaynak olarak ele alan geçerli veya gelecekteki akışları etkilemez. OPTIMIZE
kaldırılan dosyalar ve işlem tarafından eklenen dosyalar için dosya istatistiklerini (min, max, total vb.) döndürür. İyileştirme istatistikleri Z Sıralama istatistiklerini, toplu iş sayısını ve iyileştirilmiş bölümleri de içerir.
Küçük dosyaları otomatik sıkıştırmayı kullanarak da otomatik olarak sıkıştırabilirsiniz. Bkz. Azure Databricks'te Delta Lake için otomatik sıkıştırma.
Ne sıklıkta çalıştırmalıyım OPTIMIZE
?
Uygun maliyetli olduğunda otomatik olarak çalıştığından OPTIMIZE
emin olmak için Unity Kataloğu yönetilen tabloları için tahmine dayalı iyileştirmeyi etkinleştirin.
çalıştırma sıklıklarını OPTIMIZE
seçtiğinizde, performans ile maliyet arasında bir denge vardır. Daha iyi son kullanıcı sorgu performansı için daha sık çalıştırın OPTIMIZE
. Artan kaynak kullanımı nedeniyle bu daha yüksek bir maliyete neden olur. Maliyeti iyileştirmek için daha az sıklıkta çalıştırın.
Databricks, günlük olarak çalıştırarak OPTIMIZE
başlamanızı ve ardından maliyeti ve performans dengelemesini dengelemek için sıklığı ayarlamanızı önerir.
Çalıştırılacak OPTIMIZE
en iyi örnek türü (bin-packing ve Z-Ordering) nedir?
Her iki işlem de büyük miktarlarda Parquet kod çözme ve kodlama yapan yoğun CPU kullanan işlemlerdir.
Databricks, İşlem için iyileştirilmiş örnek türlerini önerir. OPTIMIZE
ekli SSD'lerden de yararlanır.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin