Delta Lake için harmanlama desteği

Dize karşılaştırmalarının ve sıralamanın nasıl davranacağını denetlemek için Delta tablolarındaki dize alanlarında harmanlamalar belirtebilirsiniz; örneğin büyük/küçük harfe duyarlı olmayan eşleştirmeyi veya yerel ayar kullanan sıralamayı etkinleştirebilirsiniz. Bunun için Databricks Runtime 16.4 LTS ve üzeri gerekir.

Harmanlama türlerinin, adlandırma kurallarının ve öncelik kurallarının tam açıklaması için bkz. Harmanlama.

Varsayılan olarak, Delta Lake dize alanları için harmanlamayı UTF8_BINARYolarak ayarlar.

Önemli

Harmanlamayı etkinleştirmek, delta tablonuza collations yazar tablosu özelliğini ekler ve bu özellik dış okuyucularla ve diğer platform özellikleriyle uyumluluğu etkiler. Üretim tablolarında harmanlamayı etkinleştirmeden önce Sınırlamalar bölümünü gözden geçirin.

Harmanlama ile tablo oluşturma

Yeni bir tablo oluştururken sütun düzeyinde harmanlama belirtebilirsiniz. Harmanlama, iç içe türlerin içindeki en üst düzey dize sütunlarına ve dize alanlarına uygulanabilir:

CREATE TABLE catalog.schema.my_table (
  id BIGINT,
  name STRING COLLATE UTF8_LCASE,
  metadata STRUCT<label: STRING COLLATE UNICODE>,
  tags ARRAY<STRING COLLATE UTF8_LCASE>,
  properties MAP<STRING, STRING COLLATE UTF8_LCASE>
) USING delta

Not

MAP anahtarlar harmanlamayı kullanamaz. Yalnızca MAP değerler harmanlanmış dizeleri destekler.

Var olan bir sütunda harmanlamayı değiştirme

kullanarak ALTER TABLEmevcut bir sütunun harmanlamasını değiştirebilirsiniz:

-- Set a column to case-insensitive collation
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_LCASE

-- Revert a column to the default binary collation
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_BINARY

Harmanlamayı değiştirdikten sonra istatistikleri ve veri düzenini güncelleştirme

Sütunun sıralama düzenini değiştirmek mevcut verileri yeniden yazmaz veya istatistikleri güncellemez. Sorgular yeni harmanlama altında doğru sonuçları hemen döndürür, ancak aşağıdaki adımları uygulayana kadar dosya atlama ve kümeleme daha az etkili olabilir:

  1. Sütun için dosya atlama istatistiklerini güncelleştirin.
   ANALYZE TABLE my_table COMPUTE DELTA STATISTICS
  1. Tablonuzda sıvı kümeleme kullanılıyorsa kümeleme düzenini yeniden yazın:
   OPTIMIZE FULL my_table
  1. Tablonuzda ZORDER kullanılıyorsa artımlı iyileştirmeyi devre dışı bırakın ve tüm dosyaları yeniden yazın:
   SET spark.databricks.optimize.incremental = false;
   OPTIMIZE my_table ZORDER BY zorder_column;

Bu adımların atlanması yanlış sonuçlara neden olmaz, ancak sonraki tam yeniden yazma tarihine kadar geçmiş verilerde sorgu performansını düşürebilir.

Azure Databricks, sorgu sonuçlarındaki harmanlamayı her zaman dikkate alır.

Tablo için harmanlamayı devre dışı bırakma

Harmanlama tablosu özelliğini kaldırmak için, önce her harmanlanmış sütunu UTF8_BINARY olarak yeniden ayarlayın.

-- Repeat for each collated column
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_BINARY

Ardından tablo özelliğini bırakın:

ALTER TABLE my_table DROP FEATURE collations

Diğer ayrıntılar için bkz . Delta Lake tablo özelliğini bırakma ve tablo protokolünü düşürme .

Şema evrimi ve sıralama

Şema evrimi, sıralama düzeni belirtilmiş sütunlar eklediğinde veya birleştirdiğinde, aşağıdaki kurallar geçerlidir:

  • Hedef tabloda bir kaynak sütun zaten varsa, hedef tablonun bu sütun için harmanlaması korunur. Kaynak sütunun harmanlaması yoksayılır.
  • Kaynak sütun yeniyse ve harmanlama belirtilmişse, hedef tablo yeni sütun için bu harmanlamayı benimser.
  • Hedef tabloda tablo özelliği henüz collations etkinleştirilmemişse, harmanlanmış sütun eklemek bunu otomatik olarak etkinleştirir.

Sınırlama

Harmanlamanın etkinleştirildiği Delta tabloları için aşağıdaki sınırlamalar geçerlidir:

Uyumluluk ve birlikte çalışabilirlik:

  • Tablo özelliğini tanımayan dış okuyucular collations, yanlış sıralama düzenleri veya karşılaştırmalar üretebilecek olan UTF8_BINARY öğesine geri döner.
  • Delta Paylaşımı, varsayılan olmayan harmanlama sütunlarında tek tek bölümlerin paylaşımını desteklemez. Bunun yerine tabloyu paylaşın.
  • UniForm harmanlama içeren tablolar için desteklenmez.
  • Databricks Runtime tarafından tanınmayan bir sıralama düzeniyle harici olarak oluşturulan delta tabloları sorgulandığında bir hata fırlatılır.
  • Scala veya Python için OSS Delta Lake API'leri harmanlamayı desteklemez. Spark SQL veya DataFrame API'lerini kullanın.

Sorgu ve özellik kısıtlamaları:

  • Harmanlanmış sütunlar CHECK kısıtlamalarında kullanılamaz.
  • Harmanlanmış sütunlara oluşturulan sütun ifadelerinde başvurulamaz
  • Harmanlanmış sütunlar bloom filtre dizinleriyle kullanılamaz (kullanım dışı)
  • Yapılandırılmış Akış durum bilgisi olan sorgularda (toplamalar, birleştirmeler, yinelenenleri kaldırma) harmanlanmış sütunlara başvurulamaz
  • MAP Anahtar sıralanmış dize olamaz. Yalnızca MAP değerler harmanlamayı destekler