Azure Databricks Apache Iceberg nedir?

Apache Iceberg şema evrimi, zaman yolculuğu ve gizli bölümleme gibi özellikleri destekleyen analiz iş yükleri için açık kaynak bir tablo biçimidir. Delta Lake gibi Iceberg de nesne depolamadaki verileriniz üzerinde ACID işlemlerine izin veren bir soyutlama katmanı oluşturur.

Azure Databricks, Apache Parquet dosya biçimini ve Iceberg belirtiminin 1, 2 ve 3 sürümlerini kullanan Iceberg tablolarını destekler. Iceberg, her tablo değişikliği için yeni meta veri dosyaları yazarak bölünmezliği ve tutarlılığı korur. Azure Databricks içindeki tüm Iceberg tabloları açık Iceberg tablo biçimi belirtimini izler. Bkz. Iceberg tablosu belirtimi.

Iceberg kataloğu, bir tablo yüklenirken geçerli meta verileri döndüren Iceberg tablo mimarisinin en üst düzey katmanıdır. Iceberg kataloğu tablo oluşturma, bırakma ve yeniden adlandırma gibi işlemleri işler.

Azure Databricks tarafından yönetilen Iceberg tabloları desteklemektedir:

Gereksinimler

Apache Iceberg tarafından yönetilen veya yabancı tabloları kullanmak için aşağıdaki gereksinimleri karşılamanız gerekir:

  • Unity Kataloğu'nu etkinleştirmiş bir çalışma alanı kullanın.
  • Databricks Runtime 16.4 LTS veya üzerini kullanın.

Yönetilen tablolar için aşağıdaki gereksinimi de karşılamanız gerekir:

  • Sunucusuz işlemin etkinleştirildiği bir çalışma alanı

Azure Databricks, yönetilen tablolar için Iceberg tablosu meta verilerini korumak için sunucusuz işlem kullanır. Sunucusuz işlem, tabloyu destekleyen bulut depolama hesabına ağ bağlantısına sahip olmalıdır. Bir güvenlik duvarı depolama hesabını koruyorsa sunucusuz işlemin ona ulaşabilmesi için sunucusuz ağ bağlantısını yapılandırın. Gerekli kurulum bulutunuza bağlıdır. Daha fazla bilgi için bkz . Sunucusuz işlem düzlemi ağı.

Unity Kataloğu'nda Buzdağı tabloları oluşturma

Unity Kataloğu'nda oluşturduğunuz buzdağı tabloları yönetilen Iceberg tablolarıdır. Şu tabloları kullanarak oluşturabilirsiniz:

  • Databricks Runtime veya Databricks SQL
  • Apache Spark, Flink, Trino veya Kafka gibi Iceberg REST Katalog API'sini destekleyen dış Iceberg uyumlu altyapılar. Bkz. Apache Iceberg istemcilerinden Access Azure Databricks tabloları.

Yönetilen Iceberg tabloları, Azure Databricks platform özellikleriyle tamamen tümleşiktir:

  • Unity Kataloğu, bu tablolarda anlık görüntü süre sonu ve dosya sıkıştırma gibi yaşam döngüsü görevlerini yönetir.
  • Sıvı kümeleme sorgu performansını artırır.
  • Tahmine dayalı iyileştirme , depolama maliyetlerini azaltmak ve sorgu hızını artırmak için işlemleri otomatikleştirir.
  • gerçekleştirilmiş görünümler , kaynak veriler değiştikçe sonuçların güncel kalmasını sağlamak için artımlı yenilemeyi destekler.
  • akış tabloları , Databricks SQL kullanılarak Kafka ve bulut nesne depolamadan artımlı veri yüklemeyi destekler.

Databricks, Unity Kataloğu'nu okumak ve yazmak için Iceberg istemci sürümü 1.9.2 ve üzerini kullanmanızı önerir.

Diğer kataloglar tarafından yönetilen Iceberg tablolarını okuma

Yabancı Iceberg tablosu, Unity Kataloğu dışındaki bir katalog tarafından yönetilen bir Iceberg tablosudur. Dış katalog tablonun geçerli meta verilerini depolar. Azure Databricks meta verileri almak ve tabloyu nesne depolamadan okumak için Lakehouse Federation kullanır.

Yabancı Buzdağı tabloları Azure Databricks salt okunur ve sınırlı platform desteğine sahiptir.

Dış sistemleri kullanarak Iceberg tablolarına erişme

Unity Kataloğu'ndaki tüm Iceberg tablolarına Iceberg REST Kataloğu API'sini kullanarak erişebilirsiniz. Bu açık API, farklı diller ve platformlarda dış Iceberg altyapılarından okuma ve yazma işlemlerini destekler. Bkz. Apache Iceberg istemcilerinden Access Azure Databricks tabloları.

REST Kataloğu, temel depolamaya erişim sağlamak için dış motorlara geçici kimlik bilgileri sunan kimlik bilgisi sağlama hizmetini destekler. Daha fazla bilgi için bkz. Dış sistem erişimi için Unity Kataloğu kimlik bilgileri sağlanması.

Uyarı

Kimlik bilgisi otomatları, varsayılan depolamayı kullanan çalışma alanlarında desteklenmez. Bkz. Sınırlamalar.

Yönetilen Iceberg tablolarını klonlayın

Yönetilen Iceberg tablosunun tam, bağımsız bir kopyasını DEEP CLONE kullanarak oluşturabilirsiniz. Derin kopya, tablonun veri dosyalarını ve meta verilerini Unity Catalog'daki yeni bir yönetilen Iceberg tablosuna kopyalar. Bkz. Yönetilen bir Iceberg tablosunu klonlama.

Harici Iceberg okuyucularıyla uyumlu bir maddileştirilmiş görünüm oluşturma

Important

Yönetilen Iceberg somutlaştırılmış görünümleri Genel Önizleme özelliğindedir. Bu özelliği etkinleştirmek için Databricks hesap ekibinize ulaşın.

Dış Iceberg okuyucularla uyumlu gerçekleştirilmiş bir görünüm oluşturabilirsiniz. Bir tane oluşturmak için, USING ICEBERG ifadesinde CREATE MATERIALIZED VIEW kullanın. Söz diziminin tamamı için bkz CREATE MATERIALIZED VIEW . (işlem hatları). Tam gereksinimler için bkz. Akış tablolarına ve gerçekleştirilmiş görünümlere dış veri erişimini etkinleştirme.

CREATE MATERIALIZED VIEW <mv_name>
USING ICEBERG
AS
SELECT * FROM samples.nyctaxi.trips;

Somutlaştırılmış görünümü oluşturduktan sonra, REPAIR TABLE ile SYNC METADATA komutunu çalıştırın. Bkz. REPAIR TABLE.

REPAIR TABLE <mv_name> SYNC METADATA;

Harici Iceberg okuyucuları somutlaştırılmış görünümü okuyabilir, ancak bu görünüme yazamaz. Bir harici Iceberg okuyucusundan gerçekleştirilmiş görünümü okumak için bkz. Akış tablolarına ve gerçekleştirilmiş görünümlere dış veri erişimini etkinleştirme.

Bölüm evrimi

Bölüm evrimi ile, verileri yeniden yazmadan mevcut bir Apache Iceberg tablosunun bölümleme düzenini değiştirebilirsiniz. Yeni veriler güncelleştirilmiş bölüm düzeniyle yazılır ve mevcut veriler özgün bölüm düzenini korur. Apache Iceberg bölüm belirtimlerini izler ve sorgu zamanında doğru filtreyi uygular. Bkz. Apache Iceberg için bölüm evrimi.

Uyarı

Bölüm evrimi, Databricks SQL aracılığıyla değil, Iceberg REST Kataloğu kullanılarak dış Iceberg altyapıları aracılığıyla yönetilen Iceberg tablolarında desteklenir. gibi years()bucket() ifade tabanlı bölüm dönüşümleri yönetilen Iceberg tablolarında desteklenmez. Bkz. Sınırlamalar.

Dış erişimi yapılandırmak için bkz. Apache Iceberg istemcilerinden Access Azure Databricks tabloları.

Aşağıdaki örneklerde Spark SQL ve Iceberg uzantısı ile bölüm evriminin nasıl kullanılacağı gösterilmektedir. Apache Iceberg bölüm evrimi söz dizimi ve desteklenen dönüşümler için bkz. Apache Iceberg Spark DDL.

Bölüm alanı ekle

Var olan bir tabloya yeni bölüm alanı eklemek için:

ALTER TABLE catalog.schema.table ADD PARTITION FIELD column_name;

Bir bölüm alanını sil

Tablodan var olan bir bölüm alanını kaldırmak için:

ALTER TABLE catalog.schema.table DROP PARTITION FIELD column_name;

Bölüm alanını değiştirme

Ara yeniden bölümleme olmadan bir bölüm alanını başka bir bölüm alanıyla değiştirmek için:

ALTER TABLE catalog.schema.table REPLACE PARTITION FIELD old_column WITH new_column;

Sınırlama

Azure Databricks'daki Iceberg tabloları için aşağıdaki sınırlamalar geçerlidir ve değiştirilebilir:

  • Iceberg tabloları yalnızca Apache Parquet dosya biçimini destekler.
  • Iceberg v2 için konum silmeleri ve eşitlik tabanlı silmeler desteklenmez. Bunun yerine Azure Databricks, satır düzeyi silme işlemleri için Iceberg v3 silme vektörlerini destekler.
  • Dallanma ve etiketleme desteklenmez. Yabancı Iceberg tablolarını okurken yalnızca ana dala erişilebilir.
  • Bölümleme:
    • Yalnızca dış Iceberg motorlarından etkileşim kurulduğunda, yönetilen Iceberg tablolarında bölüm evrimi desteklenir.
    • Yabancı Iceberg tabloları bölümlendirme evrimini desteklemez.
    • Türe göre BINARY bölümleme desteklenmez.
  • Görünümler harici Iceberg motorları tarafından erişilemez.
  • Aşağıdaki veri türleri desteklenmez:
    • UUID
    • Fixed(L)
    • TIME
    • Gerekli alanlar ile iç içe geçmiş STRUCT
  • Iceberg v3'e özgü sınırlamalar için bkz. Sınırlamalar.

Yönetilen Iceberg tablolarının sınırlamaları

Aşağıdaki sınırlamalar özellikle yönetilen Iceberg tabloları için geçerlidir:

  • Yönetilen Iceberg tabloları yalnızca tablo bakımı için tahmine dayalı iyileştirme etkinleştirildiğinde oluşturulabilir.
  • Aşağıdaki tablo özellikleri Unity Kataloğu tarafından yönetilir ve el ile ayarlanamaz:
    • write.location-provider.impl
    • write.data.path
    • write.metadata.path
    • write.format.default
    • write.delete.format.default
  • Tablo sıkıştırmasını değiştirmek için sıkıştırma codec'i desteklenmez. Tüm tablolar varsayılan olarak Zstd kullanır.
  • İfadelere göre bölümleme (örneğin, years(), months()days(), , hours()), bucket()desteklenmez.
  • Apache Iceberg'de desteklenmeyen özellikler yönetilen Iceberg tablolarında da kullanılamaz. Buna Delta Lake tarafından oluşturulan kolonlar, Azure Databricks üzerindeki kısıtlamalar ve Delta Lake için sıralama desteği dahildir.

Yurtdışı Buzdağı tablo sınırlamaları

Aşağıdaki sınırlamalar özellikle yabancı Iceberg tabloları için geçerlidir:

  • Zaman yolculuğu yalnızca daha önce Azure Databricks'te okunan Iceberg anlık görüntüleri (yani SELECT deyiminin yürütüldüğü anlık görüntüler) için desteklenir.
  • Iceberg bölümleme için demet dönüştürme işlevlerinin kullanılması, koşullu filtreler kullanıldığında sorgu performansını düşürebilir.
  • Bulut depolama katmanlama ürünleri, Amazon S3 gibi, yabancı Iceberg tablolarıyla entegre edilmemiştir. Azure Databricks'de yabancı Iceberg tablolarına erişmek, daha düşük maliyetli depolama katmanlarında arşivlenen verileri geri yükleyebilir.
  • Özel erişim modu kümelerinde, Iceberg tablolarındaki okumalar ve REFRESH FOREIGN TABLE işlemleri ALL PRIVILEGES gerektirir.