Aracılığıyla paylaş


Veri dosyası düzenini iyileştirme

Tahmine dayalı iyileştirme, Unity Kataloğu yönetilen tablolarında otomatik olarak OPTIMIZE çalıştırır. 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. Unity Kataloğu yönetilen tabloları için tahmine dayalı iyileştirme.

komutu, OPTIMIZE tablolarda 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ümeleme olmaksızın tablolar, isteğe bağlı olarak, yeniden yazmada veri kümelemeyi iyileştirmek için bir ZORDER BY yan tümcesi içerebilir. Databricks bölümler veya ZORDERdiğer veri düzeni yaklaşımları yerine sıvı kümeleme kullanılmasını önerir.

Not

ZORDER Delta Lake'e özgü bir iyileştirmedir. Apache Iceberg tabloları bunun yerine kümeleme ve sıralama stratejilerini kullanır.

Bkz. OPTIMIZE.

Önemli

Databricks Runtime 16.0 ve üstü sürümlerde, sıvı kümeleme etkinleştirildiğinde tabloların yeniden kümelemelerini zorlamak için OPTIMIZE FULL ile kullanabilirsiniz. Tüm kayıtlar için zorla yeniden kümelemeye bakın.

Söz dizimi örnekleri

Komutunu çalıştırarak sıkıştırmayı tetikleyin OPTIMIZE :

SQL

OPTIMIZE table_name

Piton

Python DeltaTable API'si Delta Lake'e özgüdür.

from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()

Scala programlama dili

Scala DeltaTable API'si Delta Lake'e özgüdür.

import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()

Büyük miktarda veriniz varsa ve yalnızca bir alt kümesini iyileştirmek istiyorsanız, kullanarak WHEREisteğe bağlı bir bölüm koşulu belirtin:

SQL

OPTIMIZE table_name WHERE date >= '2022-11-18'

Piton

Python DeltaTable API'si Delta Lake'e özgüdür.

from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()

Scala programlama dili

Scala DeltaTable API'si Delta Lake'e özgüdür.

import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()

Not

  • Bin-packing optimizasyonu idempotenttir, yani aynı veri kümesi üzerinde iki kez çalıştırıldığında, ikinci çalıştırmanın hiçbir etkisi olmaz.
  • Kutu yerleştirme, disk üzerindeki boyutlarına göre eşit dengede veri dosyaları oluşturmayı amaçlar, ancak dosya başına tuple sayısı önemli değildir. 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 OPTIMIZE işlem günlüğünden gereksiz dosyaları kaldırdığında kesintiye uğramadıkları anlamına gelir. OPTIMIZE tabloda veriyle ilgili hiçbir değişiklik yapmaz, bu nedenle bir OPTIMIZE önce ve sonra okunması aynı sonuçlara sahiptir. Akış kaynağı olan bir tabloda OPTIMIZE 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. Optimizasyon istatistikleri, Z-Sıralama istatistiklerini, optimize edilen paket ve bölümlerin sayısını içerir.

Küçük dosyaları otomatik sıkıştırmayı kullanarak da otomatik olarak sıkıştırabilirsiniz. Bkz. Otomatik sıkıştırma.

Ne sıklıkta çalıştırmalıyım OPTIMIZE?

OPTIMIZE uygun maliyetli olduğunda otomatik olarak çalıştığından 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ı OPTIMIZEseç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 OPTIMIZE çalıştırarak başlamanızı ve ardından maliyet ve performans arasında denge kurmak için sıklığı ayarlamanızı önerir.

OPTIMIZE çalıştırmak için en iyi örnek türü nedir (bin-packing ve Z-Ordering)?

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.