Aracılığıyla paylaş


Delta tablolarını sıkıştırma

Dosya sistemleri ve ilişkisel veritabanları gibi veriler de yakından yönetilmediği sürece zaman içinde parçalanır ve bu da verileri okumak için aşırı işlem maliyetine neden olur. Delta Lake bir özel durum değildir. Tek tek dosya işlemi maliyetlerini azaltmak, veri sıkıştırmayı iyileştirmek ve okuyucu paralelliğini iyileştirmek için veri dosyaları düzenli aralıklarla en uygun düzene yeniden yazılmalıdır. Komut OPTIMIZE bu zorluğu ele alır: bir bölüm içindeki küçük dosyaları ideal bir dosya boyutunu hedefleyen kutular halinde gruplandırıp depolamaya yeniden yazar. Sonuç, aynı verilerin daha az dosyaya sıkıştırılmış olmasıdır.

İpucu

Farklı tüketim senaryolarına (SQL Analytics Uç Noktası, Power BI Direct Lake, Spark) yönelik sıkıştırma stratejileri hakkında kapsamlı iş yükleri arası kılavuz için bkz. İş yükü tablosu bakımı ve iyileştirmesi.

Sıkıştırma yöntemleri

Microsoft Fabric, Delta tablolarında en uygun dosya boyutlarını korumak için çeşitli yaklaşımlar sunar:

OPTIMIZE komut

OPTIMIZE Komut, Delta tablolarını sıkıştırmaya yönelik temel işlemdir. Delta tablolarındaki veri düzenini geliştirmek için küçük dosyaları daha büyük dosyalara yeniden yazar.

OPTIMIZE dbo.table_name
Mülkiyet Description Varsayılan değer Oturum yapılandırması
minFileSize Bu eşikten küçük dosyalar birlikte gruplandırılır ve daha büyük dosyalar olarak yeniden yazılır. 1073741824 (1 g) spark.databricks.delta.optimize.minFileSize
maxFileSize komutu tarafından OPTIMIZE oluşturulan hedef dosya boyutu. 1073741824 (1g) spark.databricks.delta.optimize.maxFileSize

Önemli

Idempotent bir işlem olan OPTIMIZE (yani, art arda iki kez çalıştırmak veriyi yeniden yazmaz), Delta tablosunun boyutuna göre çok büyük bir minFileSize değeri kullanmak yazma amplifikasyonuna neden olabilir ve bu da işlemi gerekenden daha hesaplamalı ve pahalı hale getirebilir. Örneğin, dosyanız minFileSize 1 GB olarak ayarlandıysa ve tablonuzda 900 MB'lık bir dosya varsa, tablonuza 1 KB'lik küçük bir dosya yazılarak çalıştırıldığında OPTIMIZE makul boyuttaki 900 MB dosyası yeniden yazılır. Dosya boyutunu otomatik olarak yönetme hakkında yönergeler için uyarlamalı hedef dosya boyutu belgelerine bakın.

OPTIMIZE Z-Order ile

ZORDER BY yan tümcesi belirtildiğinde, OPTIMIZE, z-sırası sütunları için benzer değerlere sahip satırların aynı dosyalarda bir arada bulunmasını sağlamak amacıyla tüm etkin dosyaları yeniden yazar, bu da bu sütunları filtreleyen sorgular için dosya atlama etkinliğini artırır. Şu durumlarda Z-Order kullanın:

  • Sorgularınız sık sık iki veya daha fazla sütunu birlikte filtreler (örneğin, tarih + customer_id) ve
  • Bu önermeler, dosya düzeyinde atlama yoluyla taranan dosya sayısını azaltacak kadar seçicidir.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2)

OPTIMIZE V-Order ile

VORDER cümlesi, sıkıştırma için kapsamlanan dosyaların V-Order optimizasyonunun uygulanmasına neden olur. V-Order hakkında daha fazla bilgi için ayrıntılı belgelere bakın.

OPTIMIZE dbo.table_name VORDER

OPTIMIZE sıvı kümeleme ile

Sıvı kümeleme bir tablo seçeneği olarak belirtilir; Ayrıntılar için bkz. Sıvı kümelediğini etkinleştirme . Sıvı kümeleme etkinleştirildiğinde, OPTIMIZE kümeleme ilkesini uygulayan fiziksel yeniden yazmayı gerçekleştirir.

Önemli

Veriler yalnızca OPTIMIZE sıvı kümelenmiş özellikli tablolarda çalıştırıldığında kümelenir. Normal yazma işlemleri verileri kesinlikle kümelemiyor. Otomatik sıkıştırmayı kullanma veya iyileştirme işlerini el ile zamanlama gibi bir sıkıştırma stratejisine sahip olmak, kümelenmiş verilerin (geliştirilmiş Delta dosyası atlama) avantajlarını elde etmek için kritik öneme sahiptir.

Hızlı iyileştirme

Hızlı iyileştirme, Delta tablo dosyalarını akıllı bir şekilde analiz eder ve performansı anlamlı bir şekilde geliştirme olasılığı olmayan sıkıştırma işlemlerini atlar.

Küçük dosyalar mevcut olduğunda dosyaları körü körüne sıkıştırmak yerine hızlı iyileştirme, her aday kutusunun (küçük dosya grubu) yapılandırılabilir en iyi uygulama sıkıştırma hedeflerini karşılayıp karşılamadığını değerlendirir. Hızlı İyileştirme, birleştirmenin en düşük hedef boyutuna ulaşma olasılığı yüksekse veya çok fazla küçük dosya varsa, bir dosya kümesinde sıkıştırmayı çalıştırır. Aksi takdirde, bu grubu atlar veya sıkıştırması gereken dosya sayısını azaltır.

SET spark.microsoft.delta.optimize.fast.enabled = TRUE

Hızlı iyileştirme, sıkıştırma beklentilerinize göre ince ayarlanabilir:

Mülkiyet Description Varsayılan değer Oturum yapılandırması
minNumFiles Bölme sıkıştırılmış bir dosya üretmek için tahmin edilen yeterli veri içermiyorsa, iyileştirmenin gerçekleştirilmesi için bir bölmede bulunması gereken küçük dosyaların sayısı. 50 spark.microsoft.delta.optimize.fast.minNumFiles
parquetCoefficient Bölmenin sıkıştırma kapsamına dahil edilmesi için bir bölmede bulunması gereken küçük dosya verilerinin minimum miktarını belirlemek için iyileştirme bağlamı minimum dosya boyutuyla çarpılır. 1.3 spark.microsoft.delta.optimize.fast.parquetCoefficient

Uyarı

Bir parquetCoefficient bölmenin hedef boyutunun iyileştirme bağlamının en düşük hedef dosya boyutundan daha büyük olmasına neden olur. Bu katsayı, birden çok küçük parke dosyasının birleştirilmesinin daha iyi sıkıştırmaya ve dolayısıyla küçük dosyaların toplamından daha az veriye neden olduğu gerçeğini ifade eder. Bu değer, fast optimize işleminin kutuları atlama sıklığında daha muhafazakâr olacak şekilde artırılabilir veya daha esnek kutu atlamalarına izin vermek için azaltılabilir.

Nasıl çalışır?

Hızlı optimizasyon, bölmeler sıkıştırılmadan önce ek denetimler getirir. Her aday kutusu için hızlı iyileştirme şunları değerlendirir:

  • Konteynırdaki tahmini ham veri miktarı (küçük boyutlu dosyaların toplamı)
  • Küçük dosyaları birleştirmenin, yapılandırılan en düşük hedef boyutu karşılayan bir dosya oluşturup oluşturmayacağının tahmin edilip edilmediği
  • Bölmenin yapılandırılmış en az küçük dosya sayısını içerip içermediği

Hızlı iyileştirme, küçük dosyaların her bir kutusunu değerlendirir ve yalnızca en düşük hedef boyutuna ulaşabilecek veya en düşük dosya sayısını aşacak küçük dosyaları sıkıştırıyor. Bu eşikleri karşılamayan bölmeler atlanır veya kısmen sıkıştırılır. En iyi duruma getirilmemiş bölmelerin atlanması gereksiz yeniden yazmaları azaltır, yazma amplifikasyonu azaltır ve OPTIMIZE işlerini daha etkili hale getirir.

Optimize'ın bir bölümün sıkıştırılıp sıkıştırılmadığını ne kadar hızlı değerlendirdiğini gösteren ekran görüntüsü.

Uyarı

Tam uygulama zaman içinde gelişmeye tabidir.

Hızlı iyileştirme, Delta tabloları yaşam döngüsünde daha az verinin yeniden yazılmasıyla sonuçlanabilir. Aşağıdaki diyagramda gösterildiği gibi, hızlı iyileştirme, en iyi duruma getirilmemiş bölmeleri sıkıştırmayı atlar. Net sonuç daha hızlı ve daha OPTIMIZE etkili işler ve daha az yazma amplifiyesidir.

Zaman içinde daha az veri yeniden yazmaya ne kadar hızlı iyileştirme yapıldığını gösteren ekran görüntüsü.

Uyarı

Yalnızca çizim amacıyla, yukarıdaki diyagramlarda sıkıştırmadan yazılan dosyanın boyutunun küçük dosyaların boyutunun toplamı olduğu varsayılır. Ayrıca bir parquetCoefficient değerinin 1 olduğunu belirtir.

Sınırlamalar
  • Sıvı kümeleme ve Z-Order işlemleri için geçerli değildir
  • Hızlı iyileştirme, otomatik sıkıştırma davranışını değiştirmez

Dosya düzeyinde sıkıştırma hedefleri

Daha önce sıkıştırılmış (yeterince büyük) olarak kabul edilen verilerin sıkıştırma min ve maksimum dosya boyutu hedeflerini değiştirerek yeniden yazılmasını önlemek için, spark.microsoft.delta.optimize.fileLevelTarget.enabled zaten sıkıştırılmış dosyaların yeniden derlenmesini önlemek için etkinleştirilebilir. Etkinleştirildiğinde, daha önce sıkıştırma sırasında hedef dosya boyutunun en az yarısını karşılarsa dosyalar yeniden derlenmez. Dosya düzeyi hedeflerinin korunması, sıkıştırma hedef boyutunun zaman içinde değişmesi nedeniyle yazma amplifikasyonunu en aza indirir (örneğin, uyarlamalı hedef dosya boyutunu değerlendirme ve daha büyük bir hedef ayarlama gibi). Etkinleştirilirse, OPTIMIZE_TARGET_SIZE etiketi, OPTIMIZE çalıştırıldığında veya delta.targetFileSize ya da delta.targetFileSize.adaptive tablo özelliği ayarlandığında herhangi bir yazma işlemi için yeni dosyalara eklenir.

Uyarı

Varsayılan olarak etkinleştirilmemiş olsa da Microsoft, olası yazma amplifikasyonlarını sınırlamak için dosya düzeyinde sıkıştırma hedeflerinin etkinleştirilmesini önerir.

SET spark.microsoft.delta.optimize.fileLevelTarget.enabled = TRUE

Otomatik sıkıştırma

Otomatik sıkıştırma, her yazma işleminden sonra bölüm durumunu değerlendirir. Bir bölüm içinde aşırı dosya parçalanması (çok fazla küçük dosya) algıladığında, yazma işlemi tamamlandıktan hemen sonra zaman uyumlu OPTIMIZE bir işlemi tetikler. Sıkıştırma yalnızca program aracılığıyla yararlı olduğu belirlendiğinde yürütülür çünkü dosya bakımına yönelik yazıcı temelli bu yaklaşım en uygun yöntemdir.

Yeni tablolarda otomatik sıkıştırmayı etkinleştirmek için oturum düzeyinde ayarlayın:

SET spark.databricks.delta.autoCompact.enabled = TRUE

Tablo düzeyinde yalnızca belirli tablolar için etkinleştirecek şekilde ayarlayın:

CREATE TABLE dbo.table_name
TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')

Yeni tablolarda etkinleştirmek için DataFrameWriter seçeneğini kullanın:

df.write.option('delta.autoOptimize.autoCompact', 'true').saveAsTable('dbo.table_name')

Mevcut tablolarda etkinleştir:

ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')

Otomatik sıkıştırma davranışı aşağıdaki Spark oturum yapılandırmaları aracılığıyla ayarlanabilir:

Mülkiyet Description Varsayılan değer Oturum yapılandırması
maxFileSize Sıkıştırılmış dosyalar için bayt cinsinden hedef en büyük dosya boyutu. 134217728b (128 MB) spark.databricks.delta.autoCompact.maxFileSize
minFileSize Bir dosyanın sıkıştırılmış olarak kabul edilmesi için bayt cinsinden en düşük dosya boyutu. Bu eşiğin altındaki her şey sıkıştırmaya dahil edilir ve minNumFiles eşiğine doğru sayılır. Varsayılan olarak Unset, açıkça bir değer ayarlamadığınız sürece maxFileSize ayarının 1/2'si olarak hesaplanır. spark.databricks.delta.autoCompact.minFileSize
minNumFiles Otomatik sıkıştırmanın tetiklenebilmesi için eşik altında minFileSize bulunması gereken en az dosya sayısı. 50 spark.databricks.delta.autoCompact.minNumFiles

Uyarı

Microsoft, işleri zamanlamak yerine OPTIMIZE kullanılmasını önerir. Otomatik sıkıştırma genellikle okuma/yazma performansını en üst düzeye çıkarmada zamanlanmış sıkıştırma işlerinden daha iyi performans gösterir ve genellikle zamanlanmış işleri çalıştırma sıklığını kodlama, zamanlama ve iyileştirmenin bakım yükünü ortadan kaldırır. Veri işleme hizmet düzeyi hedefleri, sıkıştırma gerektiğinde otomatik sıkıştırmanın tetiklenmesinden kaynaklanan ek gecikme süresini tolere ettiğinde otomatik sıkıştırma önerilir. Veri gecikme gereksinimleri sıkıysa, zaman uyumlu sıkıştırma işlemlerinin tetiklenmesi nedeniyle yazma işlemlerinin dönemsel ani artışlar yaşamaması için iyileştirmenin ayrı bir Spark havuzunda çalışacak şekilde zamanlanması daha etkili olabilir.

Önemli

Sıkıştırma, kullanmak için kritik bir strateji olsa da, yazmayı iyileştirme gibi özellikler aracılığıyla küçük dosyalar yazmaktan kaçınma ile de uygun şekilde eşlenmelidir. Daha fazla bilgi için yazmayı iyileştirme yönergelerine bakın.

Lakehouse masa bakımı

Kullanıcılar Lakehouse kullanıcı arabiriminde olduğu gibi OPTIMIZE geçici bakım işlemleri çalıştırabilir. Daha fazla bilgi için bkz. lakehouse tablo bakımı.

En iyi yöntemlerin özeti

  • Otomatik Sıkıştırma'yı etkinleştirin ve sık sık küçük yazma işlemleri (akış veya mikroparti) olan alım işlem hatlarında el ile zamanlama yapmaktan kaçının ve dosyaların otomatik olarak sıkıştırılmasını sağlayın.
    • Diğer yazma desenleri için, küçük dosyaların biriktirilmesine karşı bir sigorta olarak etkinleştirmek yararlı olabilir, ancak veri işleme hizmet düzeyi hedeflerinizin işleme süresindeki düzenli ani artışları tolere edip etmediğini tartmak yararlı olabilir.
  • Birçok bölümü yeniden yazmanız veya Z-Order çalıştırmanız gerektiğinde sessiz pencereler sırasında tam tablo OPTIMIZE işlemlerini zamanlayın.
  • Yazma amplifikasyonunu azaltmak ve hale getirmek için OPTIMIZE'yi etkinleştirin.
  • Tabloların boyutu büyüdükçe ve daha büyük hedef dosya boyutları kullandıkça yazma yükseltmesini önlemek için dosya düzeyinde sıkıştırma hedeflerini etkinleştirin.
  • Önceden yazma sıkıştırmanın (yazmayı iyileştirme) yazma sonrası sıkıştırmadan (iyileştirme) daha az maliyetli olduğunu unutmayın. En iyi yöntemler için bkz. yazma belgelerini iyileştirme .